阿拉伯文多种结果

时间:2012-06-11 12:39:57

标签: mysql utf-8

我有一张阿拉伯文字表。有两个独特的行:

اس
اس

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

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

SET NAMES utf8;
SELECT urdu FROM transliteration WHERE urduLIKE'اس';

有什么想法吗?

3 个答案:

答案 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,我不确定我的角色是否合适。