2013-08-06 2 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 («FOLDERNAME»)

+1

Возможно, потому что вы делаете запрос в 'foldername' и обновляете на' fname'? –

+0

Редактировать: folderName/fName одинаковы :) Thx –

ответ

0

Это, скорее всего, связано с тем, что ваша входная строка содержит символы в не-ASCII-кодировке. из документации SQLlite:

ниже (X) - функция нижнего (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'; 
Смежные вопросы