Mysql 阿拉伯文文本多个结果

Mysql 阿拉伯文文本多个结果,mysql,utf-8,Mysql,Utf 8,我有一张阿拉伯文本的桌子。有两个唯一的行: اِس اُس 第一个由以下字符组成:0x0627、0x0650、0x0633 第二个由以下字符组成:0x0627、0x064F、0x0633 问题是如果我查询其中一个,它们都会出现。这在命令行和使用phpmyadmin时都会发生。以下是我为查询键入的内容: 设置名称utf8 从音译中选择乌尔都语,其中乌尔都语类似“اِس” 有什么想法吗?您正在搜索同一个单词,一个有短元音,另一个没有。因为短元音是可选的,所以两种版本都可以使用。现在MySQL似乎足够

我有一张阿拉伯文本的桌子。有两个唯一的行:

اِس
اُس

第一个由以下字符组成:0x0627、0x0650、0x0633
第二个由以下字符组成:0x0627、0x064F、0x0633

问题是如果我查询其中一个,它们都会出现。这在命令行和使用phpmyadmin时都会发生。以下是我为查询键入的内容:

设置名称utf8
从音译中选择乌尔都语,其中乌尔都语类似“اِس”


有什么想法吗?

您正在搜索同一个单词,一个有短元音,另一个没有。因为短元音是可选的,所以两种版本都可以使用。现在MySQL似乎足够聪明,可以删除元音并返回相同的条目。也许您需要从查询中删除LIKE参数,因为两个版本都是相似的

如果要避免此类问题,请从所有短元音中删除db条目,并将原始单词保存在第二行。然后,您还可以删除所有查询并搜索相同的条目。

尝试以下操作:

SELECT urdu FROM transliteration WHERE urdu LIKE 'اِس' collate utf8_bin

或者在代码的末尾添加
collate utf8\u bin
,我不确定字符是否正确。

这两个字符串的返回恰好是MySQL的一个特性(一个有用的特性!):SELECT语句可能对字符的大小写或元音长度不敏感。此功能称为排序规则。utf_unicode_ci可能是您名为
urdu
的列的排序规则

但是如果需要,可以在WHERE子句中控制它

WHERE COLLATE utf_bin urdu = 'اِس'
(如果我弄坏了你的阿拉伯语,请原谅,我不懂那种语言。)

<>但是,请考虑MySQL可能已经为您的应用程序提供了适当的结果,一旦您完成调试并投入生产。


还要注意,除非希望部分匹配,否则不需要使用LIKE。

排序规则是否设置为
utf8\u bin
?否则,MySQL可能会将它们视为相同的字符,因为它们只是同一字符的不同外壳。这不是像那样的东西,而是排序的东西。你完全正确。我只是注意到我从未对此做出回应,但这就是答案(一年前):-)