我知道,答案是很简单的,但我要香蕉。 我想我已经想尽解决方案。 开始了...
我有一个字符集latin1的数据库。 是啊,我应该有它在UTF8,但我有几个它运行的项目,所以我不想惹他们。
这个问题带有SELECT
与LIKE "%...%"
该表是用的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