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

我有一个带有字符集latin1的数据库。是的,我应该在utf8中安装它,但是我有几个正在运行的项目,所以我不想弄乱它们。

问题与SELECT一起出现在LIKE "%...%"

该表是带有COLLATE utf8_general_ci的utf8。这些字段也是带有utf8_general_ci排序规则的utf8。我的脚本文件(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行;与第二个查询,我只得到第二行。不区分大小写的搜索似乎效果很好,但是不区分重音的搜索却不起作用。

因此,我尝试在喜欢的COLLATE utf8_general_ci之后添加"%...%"。结果相同。

然后,我发现该连接是在latin1中建立的(通过PHP函数mysql_client_encoding())。因此,我每次建立连接时都会添加一个查询,指示使用utf8。我同时使用了SET NAMES UTF8 COLLATE utf8_general_ci和php的mysql_set_charset()。当我添加此配置时,第一个查询返回第1行,但第二个查询不返回任何结果。此外,所有结果都返回稀有字符(即使将所有字符都设置为utf8,您都知道,例如í°)。

这让我感到困惑。一切都设置在UTF8中,但没有按我预期的那样工作。

MySQL Server 5.0.95
PHP 5.2.14
Win7

最佳答案

停止机器!!

我发现我一切正常,并且DID响应预期。唯一的问题是,即使表,字段,文件和服务器位于utf8中,当填充表时(过去的某个时间),连接也是使用latin1建立的。

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

感谢大伙们!

关于php - MySQL字符集和排序规则:不区分重音符号不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12362082/

10-11 02:49