2012-02-14 61 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