2

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

回复
回复

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

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

设置名称 utf8;
SELECT urdu FROM transliteration WHERE urdu LIKE 'اِس';

有什么想法吗?

4

3 回答 3

2

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

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

WHERE COLLATE utf_bin urdu = 'اِس'

(如果我破坏了你的阿拉伯语,请原谅我;我不懂那种语言。)

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

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

于 2012-06-11T13:23:34.323 回答
0

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

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

于 2012-06-11T12:53:27.157 回答
0

试试这个:

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

或者更确切地说collate utf8_bin,在您的代码末尾添加,我不确定我的字符是否正确。

于 2012-06-11T13:09:00.573 回答