0

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

4

1 回答 1

0

这很可能与您的输入字符串包含非 ASCII 字符集中的字符这一事实有关。来自 SQLlite 的文档:

lower(X) -- lower(X) 函数返回字符串 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';
于 2013-08-07T05:56:55.537 回答