2012-02-14 60 views
1

我的表和列的排序規則是:utf8_general_ci,現在當我嘗試查找單詞Supermarché MySQL命令返回我空的結果:口音的話不敏感的搜索

$stmt = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements where type = "Supermarché"'); 

然而,當我找了另一個詞不口音在同一個表(同樣的列也是),我得到了正確的結果。

是否有任何與MySQL表結構有關的事情?

+0

是您的SESSION阿爾斯UTF8?試試'SET NAMES utf8;'然後重試你的查詢。 – 2012-02-14 15:06:46

+0

你的意思是在我的表'etablissements'上做一個sql查詢:'update etablissements set libelle utf8' and the same for all columns? – Luca 2012-02-14 15:12:11

+0

否。在你的數據庫連接中首先運行'SET NAMES utf8;',然後運行你的原始查詢。 – 2012-02-14 15:13:28

回答

1

您的PHP文件的編碼應該與MySQL客戶端編碼匹配。可能發生的情況是,源代碼中的é無法正確地訪問數據庫。如果你的源代碼在UTF-8編碼,你應該叫

mysqli_set_charset($link, "utf8"); or mysqli::set_charset("utf8"); 

,或者如果您使用舊版本的MySQL API:

mysql_set_charset("utf8"); 

這需要進行一次對每個連接,最好是剛創建後。

另一種可能性是用替換轉義碼的é所以,你永遠不知道下一步會發送到數據庫:

"Supermarch\xe9"  # for connections in latin1 
"Supermarch\xc3\xa9" # for connections in utf8 
+0

我使用'mysqli',所以它會是這樣的:'$ this-> db = new mysqli($ db_host,$ db_user,$ db_psw,$ db_name)或die(「連接到sql的錯誤」);如果是這樣,我得到這個警告:'警告:mysqli_set_charset()期望正好2個參數,1給出' – Luca 2012-02-14 15:24:07

+0

我有一個小錯誤,與mysqli OO接口它會是'$ this-> db-> set_charset(「utf8」);' – Joni 2012-02-14 15:28:27

+0

是的,但沒有任何改變:'$ this-> db = new mysqli($ db_host,$ db_user,$ db_psw,$ db_name)或die(「error connection到sql「); $ this-> db-> set_charset(「utf8」);',總是找不到重音的單詞:( – Luca 2012-02-14 15:31:42