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