我有一个Sqllite查询
SELECT * FROM m_table WHERE LOWER(fName) = LOWER('yui!"'':;/?') AND account = '100' ORDER BY fName COLLATE NOCASE ASC ;
上面返回0行;但是当我使用下面的相同时,它可以工作
update m_table set fName = 'yui!"'':;/? renamed' where fname='yui!"'':;/?' AND account = '100';
任何线索?
PS:我使用LOWER忽略区分大小写。我通过Android客户端使用它。于是 我也在做StringEscapeUtils.escapeSql(“folderName”)
答案 0 :(得分:0)
这很可能与您的输入字符串包含非ASCII字符集中的字符有关。来自SQLlite的文档:
lower(X) - lower(X)函数返回带有all的字符串X的副本 ASCII字符转换为小写。默认内置lower() 函数仅适用于ASCII字符。要进行大小写转换 非ASCII字符,加载ICU扩展名。 http://www.sqlite.org/lang_corefunc.html
尝试运行以下语句并查看它返回的内容。
SELECT LOWER(fName) FROM m_table WHERE fname='yui!"'':;/?' AND account = '100';