我有一张阿拉伯文字表。有两个独特的行:
اس
اس
第一个由以下字符组成:0x0627,0x0650,0x0633
第二个由以下字符组成:0x0627,0x064F,0x0633
问题是如果我查询其中任何一个,它们都会显示出来。这在命令行和使用phpmyadmin都会发生。这是我为查询键入的内容:
SET NAMES utf8;
SELECT urdu FROM transliteration WHERE urduLIKE'اس';
有什么想法吗?
答案 0 :(得分:2)
这两个字符串的返回恰好是MySQL的一个特性(一个有用的特性!):SELECT语句可能对字符的大小写或元音长度不敏感。此功能称为排序规则。 utf_unicode_ci可能是名为urdu
的列上的排序规则。
但是如果需要,你可以在你的WHERE子句中控制它。
WHERE COLLATE utf_bin urdu = 'اِس'
(如果我毁了你的阿拉伯语,请原谅我;我对这种语言一无所知。)
但是,请注意,一旦完成调试并将其投入生产,MySQL可能已经为您的应用程序提供了适当的结果。
另请注意,除非您希望部分匹配,否则不需要使用LIKE。
答案 1 :(得分:0)
你正在寻找同一个词,一个有短元音,另一个没有。由于短元音是可选的,因此您可以使用这两个版本。现在MySQL看起来很聪明,可以放下元音并返回相同的条目。也许您需要从查询中删除LIKE参数,因为两个版本都是相似的。
如果你想避免这种问题,请从所有短元音中删除数据库条目,并将原始单词保存在第二行。然后,您还可以删除所有查询并搜索相同的条目。
答案 2 :(得分:0)
试试这个:
SELECT urdu FROM transliteration WHERE urdu LIKE 'اِس' collate utf8_bin
或者在代码的末尾添加collate utf8_bin
,我不确定我的角色是否合适。