我是Android的新手,我正在使用SQLite進行查詢。我的問題是,當我在字符串中使用重音時,例如AAAAAAAAAAAAAAAAAA如果我做:SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%a%' ORDER BY MOVIE_NAME;回歸:AAAaaa(它忽略了其他人)但如果我這樣做:SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%à%' ORDER BY MOVIE_NAME;回歸:ààà(忽略標題“ààà”)我想在SQLite數據庫中選擇字符串而不關心重音和大小寫。請幫忙。
3 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
通常,SQL中的字符串比較由列或表達式COLLATE規則控制。在Android中,只預定義了三個校對序列:BINARY(默認),LOCALIZED和UNICODE。它們都不適合您的用例,遺憾的是,Java API中沒有公開用于安裝新歸類函數的C API。
要解決這個問題:
例如,向表中添加另一列 MOVIE_NAME_ASCII
將值存儲到此列中并刪除重音符號。您可以通過將字符串規范化為Unicode Normal Form D(NFD)并刪除非ASCII代碼點來刪除重音,因為NFD表示重音字符大致為純ASCII +組合重音符號:
String asciiName = Normalizer.normalize(unicodeName, Normalizer.Form.NFD)
.replaceAll("[^\\p{ASCII}]", "");
您的文本是否在此ASCII規范化列上搜索,但顯示原始unicode列中的數據。

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
您需要查看這些,而不是重音字符,而是完全不同的字符。您也可以尋找a,b或c。話雖這么說,我會嘗試使用正則表達式。它看起來像:
SELECT * from TB_MOVIE WHERE MOVIE_NAME REGEXP '.*[aAàà].*' ORDER BY MOVIE_NAME;
- 3 回答
- 0 關注
- 472 瀏覽
添加回答
舉報
0/150
提交
取消