2013-10-21 12 views
1

我遇到以下問題: 我嘗試從數據庫中查詢包含帶變音符的字符的名稱。帶有變音符的Android sqlite查詢名稱

的選擇是:

String like = "ë"; 
String selection = "LOWER(name) LIKE \"%" + like + "%\""; 

的問題是,即使我有包含「E」的查詢爲空行。有任何想法嗎? 而且我不想爲標準化名稱構建單獨的列。

+0

由於沒有合適的unicode整理序列,所以我知道的最佳解決方案是「不需要標準化名稱的單獨列」。 http://stackoverflow.com/questions/16282083/how-to-ignore-accent-in-sqlite-query-android/16283863#16283863 – laalto

+0

那麼問題是,名稱是從聯繫人數據庫,因此我必須建立另一個本地數據庫始終與電話上的聯繫人數據庫同步,並對名稱進行規範化處理,因此爲我的應用程序增加了很多複雜性和大小。這就是爲什麼我希望有一個乾淨的解決方案。但是,如果沒有乾淨的內置解決方案,我可能不得不堅持你的想法。 – john

回答

2

SQLite DOC: -

(A錯誤:SQLite的僅由默認理解上/ ASCII字符小寫LIKE運算符是情況下,通過默認的Unicode字符,超出ASCII範圍敏感有關。例如,表達式 'a' LIKE 'A' 爲TRUE,但是 'æ' LIKE 'Æ' 爲FALSE)。


所以,你應該像使用前更換變音符號。 Remove diacritics from string in Java是很好的,所以要做到這一點。或者使用較低的和兩種情況分開。

+0

我現在正在嘗試 – john

+0

不行,不工作。選擇是好的,像「erwin」「john」這樣的工作,它只有當我有變音符時才工作。我有一個名字,如果是「Ënt」,它就不起作用。 – john

+0

奇怪我刪除了「LOWER」條款,當我輸入Ë時,我得到結果。現在的問題是,如果我輸入ë小寫它不起作用 – john

-1

嘗試這種

串選擇= 「LOWER(名稱)LIKE \」 '% 「+等+」 %' \ 「」;

+0

抱歉,但它不工作。 – john