2016-05-16 46 views
0

我想從sqlite3數據庫中篩選一些記錄,但我得到不正確的結果。 對於輸入,我有一個西里爾字符串。在數據庫中,所有字符串都編碼爲UTF8,因此它們看起來像這樣「%D0%A5%D0%90%D0%93 ...」。 我將輸入字符串編碼爲UTF8並查詢數據庫。 Android studio中的代碼如下所示:使用Sqlite3和Android Studio查詢西里爾文數據

String where = (Upper(name) like '%" + URLEncoder.encode(lookFor.toUpperCase(), "UTF-8") + "%'); 

    DB.query("Clients", 
      new String[]{"name", "saldo", "db_id", "_id"}, 
      where, 
      null, 
      null, 
      null, 
      null); 

查詢返回結果,但它們之間有許多無效記錄。我是否正確地解決了問題或錯過了什麼?

回答

0

這不是UTF-8編碼,它是URL編碼。

百分號被LIKE用作模式字符,所以這是最不適合的編碼。

最好的辦法是不要編碼字符串; SQLite和Android處理純Unicode字符串就好了。 但是,如果您必須以這種方式保存數據庫內容,則可以告訴LIKE使用與ESCAPE clause不同的模式字符。