0

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

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

这个问题伴随SELECTLIKE "%...%"

该表是带有 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在 LIKE 之后添加"%...%"。结果相同。

然后,我发现连接是在 latin1 中建立的(通过 PHP 函数mysql_client_encoding())。所以我每次建立连接时都添加一个查询,指示使用utf8。我同时使用了SET NAMES UTF8 COLLATE utf8_general_ciAND php 的mysql_set_charset(). 当我添加此配置时,第一个查询返回第 1 行,但第二个查询不返回任何结果。此外,所有结果都返回稀有字符(你知道,像 ð,即使全部设置为 utf8)。

这让我很困惑。一切都以 UTF8 设置,但它不像(我)期望的那样工作。

MySQL Server 5.0.95
PHP 5.2.14
Win7
4

2 回答 2

2

停止机器!!

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

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

感谢你们!

于 2012-09-11T14:37:33.483 回答
0

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

于 2012-09-11T07:58:09.667 回答