barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

воскресенье, 3 июля 2011 г.

Регистронезависимое сравнение строк в SQLite

По-умолчанию сравнение строк в SQLite - бинарное (в отличие от MySQL). Есть несколько вариантов сделать его регистронезависимым:
1) добавив COLLATE NOCASE после оператора сравнения: ... WHERE a = b COLLATE NOCASE
2) добавив COLLATE NOCASE в объявление столбца таблицы, если для него всегда должно использоваться регистронезависимое сравнение (однако, это значение может быть переопределено в конкретном запросе установкой соответствующего COLLATE):
CREATE TABLE somename(
...
d VARCHAR(20) COLLATE NOCASE
...
)

5 комментариев:

  1. Пробовал через SQLite Database Browser создавать базу і іскать слова 'тЕст' 'теСт' 'тест' - неработает!

    ОтветитьУдалить
    Ответы
    1. Какой именно вариант не работает? С явным заданием в запросе или при создании таблицы?

      Удалить
  2. я оба сразу пробивал..

    Непомогло:
    1) добавление COLLATE NOCASE после оператора сравнения: ... WHERE a = b COLLATE NOCASE
    2) добавив CREATE TABLE somename(d VARCHAR(20) COLLATE NOCASE)
    3) select * from a where upper(b) like upper('текст')

    ОтветитьУдалить
  3. Воспрос решон создание своего COLLATE.

    ОтветитьУдалить