我已经为罗马尼亚语、捷克语、匈牙利语、波兰语、法语、德语、斯堪的纳维亚语言(即欧洲字符,但相当非ASCII)中的字符创建了一个mysql 5.6表,列编码为utf-8。
然而,我想使用ASCII字符来查询这个列--例如在like子句中--以便ă、u、ș,ț、ü、接续地使用a、e、i、o、u、s、t等查询字符。
这可能吗?
发布于 2015-05-12 22:51:33
在utf8排序中的排序规则中,有一个用于知道什么字母映射为“相等”的备忘单,它同意,对于任何排序规则,Ł不映射到L。general_ci在Z之后对其进行排序;utf8_unicode_520_ci使用L对其进行排序;其余的在M之前排序。
polish_ci将Ę视为与其他E-like字符不同的字符。Ą也是。波罗的海国家倾向于将某些重音辅音分开。
在polish_ci中,Ń (十六进制C584)在N之后和O之前进行排序;其他排序规则则将其处理为N。
utf8_unicode_520_ci可能是您最好的校对。
此外,您还可以考虑“组合”重音--其中两个utf8‘字符’“组合”成一个字符。utf8_unicode_ci为他们中的大多数人整理了“正确”,就像这里所看到的那样。
发布于 2015-05-12 08:18:18
好吧,我不认为用任何传统的方法只使用SQL是可能的。您只能编写查询预处理器,这将自动替换为欧洲的ascii字符。https://php.net/manual/en/function.str-replace.php -假设您使用的是PHP,但仍然需要将每个查询都提供给它。
发布于 2015-05-12 08:47:23
我找到了我的问题的部分答案:
如果您为该列定义的字符集是utf8_general_ci,,那么使用平面a、e、o、u的查询将找到许多(如果不是所有的话) a、e、o、u的字符集。我甚至发现 n 在Wołoszyńska使用平原n。
不幸的是,在同一个单词中没有找到小写的L“带斜杠”。
这个答案是由dddd的答案这里提出的
https://stackoverflow.com/questions/30185208
复制相似问题