【发布时间】:2015-05-12 08:09:26
【问题描述】:
我创建了一个 mysql 5.6 表,其中包含以 utf-8 编码的列,用于 罗马尼亚语、捷克语、匈牙利语、波兰语、法语、德语、斯堪的纳维亚语语言的字符 - 即欧洲字符,但完全非ASCII。
但是,我想仅使用 ASCII 字符查询此列 - 例如在 LIKE 子句中 - 以便使用 a,e,i,o,你,s,t等
这可能吗?
【问题讨论】:
我创建了一个 mysql 5.6 表,其中包含以 utf-8 编码的列,用于 罗马尼亚语、捷克语、匈牙利语、波兰语、法语、德语、斯堪的纳维亚语语言的字符 - 即欧洲字符,但完全非ASCII。
但是,我想仅使用 ASCII 字符查询此列 - 例如在 LIKE 子句中 - 以便使用 a,e,i,o,你,s,t等
这可能吗?
【问题讨论】:
有一张备忘单,用于了解在utf8 collations 中的哪些排序规则下哪些字母映射“相等” 它同意Ł 没有映射到L 的任何排序规则。 general_ci 在Z 之后排序; utf8_unicode_520_ci 与 L 排序;其余的排序在M之前。
polish_ci 将Ę 与其他类似E 的字符区别开来。 Ą 同上。波罗的海国家倾向于将某些重读辅音分开。
在polish_ci 中,Ń(十六进制C584)在N 之后和O 之前进行排序;其他排序规则将其视为等于N。
utf8_unicode_520_ci 可能是最适合您的排序规则。
另外,您可能会考虑“组合”重音符号——将两个 utf8 '字符'“组合”成一个字符。 utf8_unicode_ci 对它们中的大多数都“正确”整理,如 here 所示。
【讨论】:
嗯,我认为仅使用 SQL 的任何传统方式都无法实现。 您只能编写查询预处理器,它将自动将 ascii 字符替换为欧洲字符。 https://php.net/manual/en/function.str-replace.php - 假设您使用的是 PHP 但是您仍然需要将每个查询都提供给它。
【讨论】:
我找到了我的问题的部分答案:
如果您为列定义的字符集是 utf8_general_ci,那么 a,e,o,uflavors /strong> 将通过使用 plain a,e,o,u 的查询找到。 我什至在 Wołoszyńska 使用 plain n.
找到了 n不幸的是,没有找到同一个单词中的小写L“带斜杠”。
答案是dddd的回答here建议的
【讨论】:
utf8_unicode_ci吗?它包含额外的映射(虽然不确定它是否专门涵盖您的 L)。