具有较低和特殊字符的SQlite查询

时间:2013-08-06 07:34:26

标签: sqlite

我有一个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”)

1 个答案:

答案 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';