MySQL的字符集和归类:不区分重音不工作(MySQL charsets and collation

2019-09-22 06:48发布

我知道,答案是很简单的,但我要香蕉。 我想我已经想尽解决方案。 开始了...

我有一个字符集latin1的数据库。 是啊,我应该有它在UTF8,但我有几个它运行的项目,所以我不想惹他们。

这个问题带有SELECTLIKE "%...%"

该表是用的utf8 COLLATE utf8_general_ci。 本场也是UTF8与utf8_general_ci整理。 我的脚本文件(PHP)是UTF-8编码,并且服务器在UTF-8还提供文件服务。 所以,一切都是UTF-8。

好了,因为一切都与utf8_general_ci整理,我应该能够搜索不区分大小写和重音insentive。 例如:

将表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() 所以我加了一个查询每次连接制成,指示要使用UTF-8。 我同时使用SET NAMES UTF8 COLLATE utf8_general_ci和PHP的mysql_set_charset() 当我加入这个结构中,第一查询返回第1行,但第二个查询不返回任何结果。 此外,所有的结果返回生僻字(你知道,就像°,即使全部设置为UTF-8)。

这是pluzzing我。 一切都坐落在UTF8,但它不为(我)的工作期望。

MySQL Server 5.0.95
PHP 5.2.14
Win7

Answer 1:

停止机器!

我发现我做的一切确定,它没有如预期作出反应。 唯一的问题是,即使表,字段,文件和服务器都在UTF8,当表被填充(一段时间过去),连接已取得与latin1的。

所以我重新填充表,现在用UTF8的连接,和它的工作就好了。

感谢大伙们!



Answer 2:

我没有设置正确测试这一点,但这里有一个可能的解决方案 。 这么多的地方设置UTF8! :)



文章来源: MySQL charsets and collations: accent insensitive doesn't work