2012-06-11 89 views
2

我有一張阿拉伯文本的表格。有兩個獨特的行:阿拉伯文本多個結果

اس
اس

第一種由以下字符:            0x0627,0x0650,0x0633
第二個由以下字符:0x0627 ,0x064F,0x0633

問題是,如果我查詢其中任何一個,它們都顯示出來。這發生在命令行和使用phpmyadmin。以下是我輸入的查詢內容:

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

有什麼想法?

+1

您的排序規則設置爲「utf8_bin」嗎?否則,MySQL可能會將它們視爲相同的字符,因爲它們僅僅是同一個字符的不同外殼 – Esailija

回答

2

這兩個字符串的返回恰好是MySQL的一個特性(一個有用的特性!):SELECT語句對字符的大小寫或元音長度不敏感。該功能稱爲整理。 utf_unicode_ci可能是您的列名爲urdu的排序規則。

但是你可以在你的WHERE子句中控制這個,如果你需要的話。

WHERE COLLATE utf_bin urdu = 'اِس' 

(請原諒我,如果我缺胳膊少腿你的阿拉伯語。我懵了,語言的)

但是,請考慮MySQL可能已經被給予相應的結果爲您的應用程序,一旦你完成調試,並投入生產。

另請注意,除非您希望進行部分匹配,否則不需要使用LIKE。

+0

你完全正確。我只注意到我從來沒有迴應過這個問題,但那是答案(一年前):-) – theglossy1

0

你正在尋找相同的詞,一個有一個短元音,其他不是。由於短元音是可選的,你可以使用兩個版本。現在MySQL看起來足夠聰明,可以放棄元音並返回相同的條目。也許你需要從查詢中刪除LIKE參數,因爲兩個版本都是一樣的。

如果你想避免這種問題,從所有短元音中去掉你的數據庫條目,並將原始單詞保存在第二行。然後,您還可以刪除所有查詢並搜索相同的條目。

+0

它不是一個「LIKE」事物,它是一個整理事物。 –

0

試試這個:

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

或者說在你的代碼末尾添加collate utf8_bin,我不知道我得到了字符權。