我知道答案很简单,但我要吃香蕉。我想我已经尝试了所有可用的解决方案。开始了...
我有一个带有字符集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/