如何使MySQL匹配'%D%`=> `Đ`

时间:2011-06-14 19:33:39

标签: mysql unicode collation

我遇到了一个非常令人沮丧的功能,由于某种原因,涉及选择LIKE %D%的查询与Đ不匹配。

然而,所有其他类似的字符都匹配。 %n%匹配ñ%o%匹配,但如果我正在搜索%Dong Nai%,我将无法获得Đồng Nai

虽然%Thua Thien-Hue%将匹配Thừa Thiên-Huế

这是一个MySQL功能还是硬编码成Unicode的东西,还是有办法解决这个问题?这使得使用我的网站的人无法找到某些越南省份的活动,除非他们可以访问Đ密钥,而美国几乎没有人这样做。

编辑:

a,e,i,o或u匹配所有越南元音的事实对于越南演讲者来说是非常意外的行为。

供参考;这里是越南语中的所有元音。

à,á,ã̉,ạ,a,ằ,ắ,ẵ,ẳ,ặ,ă,ầ,ấ,ẫ,ẩ,ậ,â,è,é,ẽ,ẻ,ẹ,e,ề ,ế,ễ,ể,ệ,ê,ì,í,ĩ,ỉ,ị,i,ò,ó,õ,ỏ,ọ,o,ồ,ố,ỗ,ổ,ộ,ô,ờ,ớ ,ỡ,ở,ợ,ơ,ù,ú,ũ,ủ,ụ,u,ừ,ứ,ữ,ử,ự,ư


我的问题是,'什么构成了一个足够不同的字母?'。


其他越南发言人似乎将此报告为MySQL的错误:

此行为似乎不存在于5.6+中。如果MySQL的更新有帮助,我会通知你。

http://bugs.mysql.com/bug.php?id=61258

4 个答案:

答案 0 :(得分:2)

这与整理有关。查看http://www.collation-charts.org/mysql60/,你会发现D和角色Đ在比较时并不相同。正如nico在评论中所建议的那样,最简单(尽管不是最快)的方法是在进行比较时用D替换Đ。但是,这可能不实际,具体取决于您的性能标准,在这种情况下,您可能希望保留一个单独的列或内容表,该列已经过调整,以便在将数据插入数据库时​​替换某些字符。

答案 1 :(得分:1)

那些越南元音和它们的变音符号主要是相同的(具有相同的基本特征),但其次是(变音符号)不同。使用适当的整理可以使它们相等。

然而,对于'D'和'Đ',这是不同的,因为它们不是相关字符,并且不等于任何校对规则。因此,需要比较两个字母。

Implement Vietnamese Collation in MySQL

答案 2 :(得分:0)

这是正常的,因为Đ不等于D(你不想做这种关联)......

中风(Đ,đ)用于越南语,一些南斯拉夫语(例如塞尔维亚语),摩洛语和萨米语。这不仅仅是D的“种类”,因为它的代词不同......

http://en.wikipedia.org/wiki/Eth

换句话说...当您搜索D 时查找包含Đ的记录将不会正确。这就像在搜索S时获得一美元唱$。

答案 3 :(得分:0)

就像在使用utf8mb4_0900_ai_ci排序规则的MySQL 8.0中一样,'%D%'现在可以与'Đ'匹配。