我想运行一个查询,在mysql DB中搜索特定的VARCHAR项。由于我的项目是多语言,我别无选择,只能使用Unicode UTF8作为该领域的特色。
我遇到的问题如下:
这个Charی和这个Charى看起来一样
然而,2以上的unicode是不同的(U + 0649& U + 06CC)
我有很多数据,它们包含上述两种字符的混合等等。
还有许多其他字符以类似的方式,我需要的是一种方法将一系列这些字符视为相同,以便mysql在运行查询时匹配它们。
我知道可以通过在我的查询中使用OR并包括两个字符来完成,但是还有其他任何方式,例如可以制作我自己的字符集/校对,我可以将两者定义为相同或者如果它们看起来相同然后它们对待是一样的吗?
答案 0 :(得分:1)
您希望将这些视为平等吗?
D989 1609=x0649 [ى] AL ARABIC LETTER ALEF MAKSURA
DB8C 1740=x06CC [ی] AL ARABIC LETTER FARSI YEH
我查了COLLATE utf8_unicode_ci
;他们比较不平等:
mysql> SELECT CONVERT(UNHEX('D989') USING utf8) =
-> CONVERT(UNHEX('DB8C') USING utf8) COLLATE utf8_unicode_ci AS x;
+------+
| x |
+------+
| 0 |
+------+
除非您创建自定义排序规则,否则我认为MySQL不会将它们视为相等。请参阅http://dev.mysql.com/doc/refman/5.6/en/adding-collation.html。
在进行比较之前,你可以做一组REPLACE()来将ى更改为ی。但那将是混乱和缓慢的。