我正在尝试从sqlite3数据库中过滤一些记录,但结果不正确。 对于输入,我有一个西里尔字符串。在数据库中,所有字符串都编码为UTF8,因此它们看起来像“%D0%A5%D0%90%D0%93 ......”。 我将输入字符串编码为UTF8并查询数据库。 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 :(得分:0)
这不是UTF-8编码,而是URL编码。
百分号被LIKE用作模式字符,因此这是可以选择的最不合适的编码。
最好的想法是不对字符串进行编码; SQLite和Android处理普通的Unicode字符串就好了。 但是如果你必须以这种方式保存数据库内容,你可以告诉LIKE使用ESCAPE clause的不同模式字符。