【问题标题】:MySQL charsets and collations: accent insensitive doesn't workMySQL 字符集和排序规则:不区分重音不起作用
【发布时间】:2012-09-11 02:52:05
【问题描述】:

我知道答案很简单,但我要疯了。我想我已经尝试了所有可用的解决方案。来了……

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

问题来自SELECTLIKE "%...%"

该表是 utf8 并带有 COLLATE utf8_general_ci。这些字段也是带有 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 行;并且通过第二个查询,我只得到第二行。不区分大小写的搜索似乎运作良好,但不区分重音则不行。

所以我尝试在 LIKE "%...%" 之后添加 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

【问题讨论】:

标签: php mysql utf-8 character-encoding


【解决方案1】:

停止机器!!

我发现我做的一切都很好,它确实按预期响应。唯一的问题是,即使表格、字段、文件和服务器是 utf8 格式,当表格被填充时(过去的某个时间),连接是用 latin1 建立的。

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

谢谢你们!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 2012-06-15
      • 2023-03-17
      • 1970-01-01
      • 2011-11-28
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多