我遇到以下問題: 我嘗試從數據庫中查詢包含帶變音符的字符的名稱。帶有變音符的Android sqlite查詢名稱
的選擇是:
String like = "ë";
String selection = "LOWER(name) LIKE \"%" + like + "%\"";
的問題是,即使我有包含「E」的查詢爲空行。有任何想法嗎? 而且我不想爲標準化名稱構建單獨的列。
我遇到以下問題: 我嘗試從數據庫中查詢包含帶變音符的字符的名稱。帶有變音符的Android sqlite查詢名稱
的選擇是:
String like = "ë";
String selection = "LOWER(name) LIKE \"%" + like + "%\"";
的問題是,即使我有包含「E」的查詢爲空行。有任何想法嗎? 而且我不想爲標準化名稱構建單獨的列。
從SQLite DOC: -
(A錯誤:SQLite的僅由默認理解上/ ASCII字符小寫LIKE運算符是情況下,通過默認的Unicode字符,超出ASCII範圍敏感有關。例如,表達式 'a' LIKE 'A' 爲TRUE,但是 'æ' LIKE 'Æ' 爲FALSE)。
所以,你應該像使用前更換變音符號。 Remove diacritics from string in Java是很好的,所以要做到這一點。或者使用較低的和兩種情況分開。
由於沒有合適的unicode整理序列,所以我知道的最佳解決方案是「不需要標準化名稱的單獨列」。 http://stackoverflow.com/questions/16282083/how-to-ignore-accent-in-sqlite-query-android/16283863#16283863 – laalto
那麼問題是,名稱是從聯繫人數據庫,因此我必須建立另一個本地數據庫始終與電話上的聯繫人數據庫同步,並對名稱進行規範化處理,因此爲我的應用程序增加了很多複雜性和大小。這就是爲什麼我希望有一個乾淨的解決方案。但是,如果沒有乾淨的內置解決方案,我可能不得不堅持你的想法。 – john