2013-08-06 96 views
0

我有一個Sqllite查詢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(「文件夾名稱」)

+1

也許是因爲你正在查詢'foldername'並更新'fname'? –

+0

編輯:folderName/fName是相同的:) Thx –

回答

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