【发布时间】:2011-05-22 00:22:06
【问题描述】:
MySQL 使用排序规则进行字符串比较,因为某些字符应该匹配
示例:
SELECT 'é' = 'e' COLLATE utf8_unicode_ci;
SELECT 'oe' = 'œ' COLLATE utf8_unicode_ci;
都返回真
现在,我怎样才能对引号 (') 和撇号 (') 做同样的事情
这不是同一个字符,写“it's”或“l'oiseau”(法语)时使用的正确字符都是撇号。
事实是 utf8_general_ci 或 utf8_unicode_ci 都没有整理它们。
简单的解决方案是将所有内容存储在引号中,并在用户进行搜索时替换所有撇号,但这是错误的。
真正的解决方案是创建基于 utf8_unicode_ci 的自定义排序规则并将两者标记为等效,但这需要编辑 XML 配置文件并重新启动数据库,这并不总是可行的。
你会怎么做?
【问题讨论】:
-
所以你想要一个“真正的解决方案”而不是你已经提到的那个? ;-) 我的建议是创建一个自定义排序规则(当然,假设您已经搜索了 mysql 文档和其他 3rd 方来源,以获得已经满足您需求的现有排序规则)
标签: mysql quotes collation diacritics apostrophe