如何让MySQL匹配'%D%' => 'Đ'

3
我遇到了一个非常令人沮丧的问题,原因是涉及到选择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


那是有可能的。不过看起来有点混乱。 - Ryan Ward Valverde
1
这是一个丑陋的解决方法,但如果您寻找 D 并修改查询呢?如果查询文本包含 D,则查找 DĐ,查询 field LIKE '%Dong Nai%' OR field LIKE '%Đong Nai%' - David Yaw
你的编码集是什么?Utf-8还是ISO?那个ISO呢?Latin-1,Latin-9吗? - ecchymose
Utf-8通用是编码集。 - Ryan Ward Valverde
嗨,我的Mysql版本是5.6.17,仍然无法将D与Đ匹配。有什么解决方案吗? - SonDang
显示剩余4条评论
4个回答

2
这与排序有关。请查看http://www.collation-charts.org/mysql60/,您会发现在比较时,字母D和字符Đ并不相同。在评论中,nico建议最简单(但不是最快)的方法是在比较时将Đ替换为D。但是,根据您的性能标准,这可能不实用,因此您可能希望在将数据插入数据库时保留一个已调整的内容的单独列或表,以替换某些字符。请注意保留HTML标签。

"D和字符Đ在比较时不相同。" 我认为这基本上就是我所说的。 - AJ.
奇怪的是,我在那里找不到大部分越南元音字母。 - Ryan Ward Valverde

1

越南语的元音字母及其变体主要是相等的(具有相同的基本字符),但在次要方面(即变音符号)不同。使用适当的排序规则可以使它们相等。

然而,对于“D”和“Đ”,它们不是相关字符,并且没有任何排序规则使它们相等。因此,需要同时比较这两个字母。

在MySQL中实现越南语排序


0

在MySQL 8.0中,使用utf8mb4_0900_ai_ci校对规则,'%D%'现在可以匹配到'Đ'。


-1

这是很正常的,因为Đ和D并不相等(你不想做这种相关性)...

带斜杠的D(Đ、đ)在越南语、南斯拉夫语(如塞尔维亚语)、莫罗语和萨米语中使用。它不仅仅是一种“类型”的D,因为它的发音也不同...

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

换句话说,当你搜索 D 时找到包含 Đ 的记录是不正确的。这就像在搜索 S 时得到一个美元符号 $。

1
再次遇到相同的问题,“为什么它能匹配一些不同的字母?” - Ryan Ward Valverde
1
我猜是因为它在应该匹配的时候匹配成功了(足够接近)... 当你寻找美元符号($)时,你不希望MySQL返回带有S的单词。 我想这里也是一样的... - ecchymose
我不是越南语专家,但我非常确定 D -> Đ 就像 c- > ¢ 的区别一样... 即使它们看起来相似,但它们完全不同。 - ecchymose
1
同意;因为美元符号没有声音。这种比较是荒谬的。这更像是比较两种连字符。然而,在越南语中,这两个字母是完全不同的元音字母,每个元音字母e|ê都可以带有5个重音符号之一。e的:e、ẹ、ẻ、ẽ,然后是ê的:ê、ệ、ế、ề、ể、ễ。然而,对于越南人来说,这种行为是出乎意料的,因为'e'匹配了它们所有的重音符号,因为'e'和'ê'是完全不同的。就像S和Z一样。 - Ryan Ward Valverde
1
作为一个越南语使用者,越南人使用“D”来搜索包含“D”或“Đ”的单词。 - nhkhanh
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接