【发布时间】:2013-11-05 18:40:15
【问题描述】:
我找到了很多关于排序规则和口音不敏感搜索的答案,阅读了大约 1000 篇关于这个问题的帖子和文章,但没有找到答案。
有人知道如何强制 mysql 搜索对所有波兰字符不敏感的重音吗?也许有人得到了那个(Debian)的编译整理文件?
请注意:
- 将排序规则设置为
utf8_general_ci没有帮助。它不正确支持Ł。但它确实会破坏搜索顺序。 - 将排序规则设置为
utf8_unicode_ci没有帮助。同上。 - 无法编辑排序规则文件,因为它是多字节编码。并且必须编译多字节字符集。
- 将所有不受支持的字母替换为受支持的字母不是解决方案。
我真的不明白为什么 MySQL 工作人员不威胁这是一个错误。很明显,确实如此,而且已经存在了很长时间。从 4.xx 开始,他们确实纠正了 Ś 字母......那为什么不 Ł 呢?!
我发现了一些对This MySQL functionality 的引用,但没有关于如何使用它的信息。我真的不明白那里写的是什么以及它是否可以帮助我。
测试:
mysql> show full columns from test;
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| str | varchar(255) | utf8_polish_ci | YES | | NULL | | select,insert,update,references | |
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
mysql> insert into test values('Łomża');
...
mysql> select str from test where str like '%Łomża%'\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Łomza%'\G
Empty set (0.00 sec)
--
mysql> select str from test where str like '%Łomza%' collate utf8_general_ci\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Lomza%' collate utf8_general_ci\G
Empty set (0.00 sec)
--
mysql> select str from test where str like '%Łomza%' collate utf8_unicode_ci\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Lomza%' collate utf8_unicode_ci\G
Empty set (0.00 sec)
【问题讨论】:
-
我不明白,我们用 MySQL 做搜索,即使是强 4 字节汉字表意文字,为什么 Ł 是个问题?
-
询问 MySQL 开发人员。他们不认为这是一个错误!在过去的 5 年里被报告了 100000 次,官方的回答是这不是一个错误。请检查随附的示例。我已经编辑了问题。
-
我不能帮助你,因为我没有抛光控制台。您使用 select str from test where str like '%Łomża%'\G;为什么你用 select str from test where str like '%Łomza%'\G 搜索,逻辑上返回一个空集?我将 str 插入为 utf8_general_ci,like 运算符似乎通过 PHP/PDO/MySQL 工作。
-
不确定你的意思。通过这些测试,我想证明 collate 不仅仅适用于
Ł字母。当我搜索ż时,它可以与ż以及z一起正常工作。但是Ł却没有。关于波兰控制台......它是带有英语 debian 的德国服务器 :) -
您是否会更新您的问题,并提供指向 MySQL 中有关“Ł”的已报告错误的链接?这似乎是读者需要了解的关键细节,当然他们必须评估这是否确实是 MySQL 方面的问题。