MySQL字符集和排序规则:重音不敏感不起作用

时间:2012-09-11 02:52:06

标签: php mysql utf-8 character-encoding

我知道答案很简单,但我要去香蕉。我想我已经尝试了所有可用的解决方案。我们走了......

我有一个包含charset latin1 的数据库。是的,我应该在 utf8 中使用它,但我有几个正在运行的项目,所以我不想弄乱它们。

SELECTLIKE "%...%"

一起出现问题

该表格为utf8,其中包含COLLATE utf8_general_ci。这些字段也是utf8,带有utf8_general_ci排序规则。我的脚本文件(php)是utf-8编码的,服务器也提供utf-8文件。所以,一切都是utf-8。

好的,因为所有内容都与utf8_general_ci进行了整理,我应该能够搜索不区分大小写和强调的内容。例如:

有表providers ...

id     providerName
1      Jose
2      José

我应该能够......

SELECT * FROM providers WHERE providerName LIKE "%jose%"

SELECT * FROM providers WHERE providerName LIKE "%josé%"

在这两种情况下都返回了两行。但是,在第一个查询中,我只获得第1行;并且通过第二次查询,我只得到第二行。不区分大小写的搜索似乎运行良好,但重音不敏感则不然。

所以我尝试在LIKE COLLATE utf8_general_ci之后添加"%...%"。结果相同。

然后,我发现连接是在latin1中进行的(víaPHP函数mysql_client_encoding())。所以每次建立连接时我都会添加一个查询,表示使用utf8。我使用了SET NAMES UTF8 COLLATE utf8_general_ci和php的mysql_set_charset()。当我添加此配置时,第一个查询返回第1行,但第二个查询不返回任何结果。此外,所有结果都返回稀有字符(你知道,就像ð,即使所有结果都设置为utf8)。

这让我眼花缭乱。一切都是用UTF8设置的,但它不能像(I)期望的那样工作。

MySQL Server 5.0.95
PHP 5.2.14
Win7

2 个答案:

答案 0 :(得分:2)

停止机器!!

我发现我做的一切都很好而且DID按预期做出反应。唯一的问题是,即使表,字段,文件和服务器都在utf8中,当表填充时(过去的某个时间),连接也是用latin1进行的。

所以我重新填充了表,现在使用utf8连接,它运行得很好。

谢谢你们!

答案 1 :(得分:0)

我没有正确测试的设置,但是here's a possible solution。这么多地方设置UTF8! :)