2014-02-24 160 views
0

我創建一個表具有以下SQL:字符編碼

CREATE TABLE fens_mng_people_utf8 (
    pidm varchar(16) NOT NULL default '', 
    fname varchar(32) NOT NULL default '', 
    mname varchar(32) default NULL, 
    lname varchar(32) NOT NULL default '', 
    KEY pidm (pidm) 
)CHARACTER SET utf8 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci 
DEFAULT COLLATE utf8_general_ci; 

而且一些土耳其字符如Ş顯示爲一個HTML代碼Ş即使我直接與不從SQL插入它一個文本文件。我正在從phpmyadmin查看它。

其結果是,當我嘗試在我的PHP做這樣的操作:

SELECT * FROM fens_mng_people_utf8 WHERE fname = '$fname' and lname = '$lname' 

它返回null,原因$fname$lname兩個顯示器土耳其字符正確。

我不是想在我的表中正確顯示土耳其字符或轉換$fname,因爲這將匹配在我的數據庫中的值。

感謝您的幫助!

+1

參見[UTF-8所有的通方式](http://stackoverflow.com/a/279279)。 – eggyal

回答

0

您的架構看起來不錯。檢查這個sqlfiddle。它返回正確的行。 嘗試做你的實際查詢之前添加此:

mysql_query("SET NAMES utf8"); 
0

數據庫不任何轉換爲​​HTML實體,因爲數據庫無關的HTML。除非你自己與htmlentities()做,最有可能的解釋是,瀏覽器發送你的編碼數據,因爲它不能處理的字符正確,否則。爲什麼它不能處理這個角色呢?因爲您沒有正確指示瀏覽器使用UTF-8。您需要設置Content-Type: text/html; charset=utf-8 HTTP報頭和/或設置<form ... accept-charset="utf-8">屬性,確保表單數據發送UTF-8編碼。

如果你不這樣做,並且瀏覽器默認爲Latin-1,那麼「Ş」不能用Latin-1編碼,瀏覽器的唯一回退就是向你發送HTML實體。見Handling Unicode Front To Back In A Web App

+0

正如我所說的,我使用phpMyAdmin,所以我不創造任何形式或使用我創建的PHP文件插入的數據。但是根據你的解釋,我認爲它可能是由phpmyadmin本身(這是一個非常舊的版本)造成的,它們定義表單的方式在該版本中不支持utf8。你會說這可能是案件?謝謝你的方式! – user3345638