我遇到了一个非常令人沮丧的功能,由于某种原因,涉及选择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的更新有帮助,我会通知你。
答案 0 :(得分:2)
这与整理有关。查看http://www.collation-charts.org/mysql60/,你会发现D和角色Đ在比较时并不相同。正如nico在评论中所建议的那样,最简单(尽管不是最快)的方法是在进行比较时用D替换Đ。但是,这可能不实际,具体取决于您的性能标准,在这种情况下,您可能希望保留一个单独的列或内容表,该列已经过调整,以便在将数据插入数据库时替换某些字符。
答案 1 :(得分:1)
那些越南元音和它们的变音符号主要是相同的(具有相同的基本特征),但其次是(变音符号)不同。使用适当的整理可以使它们相等。
然而,对于'D'和'Đ',这是不同的,因为它们不是相关字符,并且不等于任何校对规则。因此,需要比较两个字母。
答案 2 :(得分:0)
这是正常的,因为Đ不等于D(你不想做这种关联)......
中风(Đ,đ)用于越南语,一些南斯拉夫语(例如塞尔维亚语),摩洛语和萨米语。这不仅仅是D的“种类”,因为它的代词不同......http://en.wikipedia.org/wiki/Eth
换句话说...当您搜索D 时查找包含Đ的记录将不会正确。这就像在搜索S时获得一美元唱$。
答案 3 :(得分:0)
就像在使用utf8mb4_0900_ai_ci
排序规则的MySQL 8.0中一样,'%D%'现在可以与'Đ'匹配。