Поиск без учета регистра

Как-то раз проглядел, что у меня в базе данных сравнение строк было регистро-зависимым (cp1251_general_cs). К примеру, при запросе:

SELECT * FROM name_table WHERE name LIKE '%Слово%'

Находились только те записи, в которых буква «С» была большой, а все остальные буквы должны были быть в нижнем регистре.

Чтобы произвести регистро-независимый поиск нужно было делать следующий запрос:

SELECT * FROM name_table WHERE name LIKE '%Слово%' COLLATE cp1251_general_ci

About ezoterik

Программист
This entry was posted in Веб-разработка and tagged , , . Bookmark the permalink.
  • http://www.PooShok.com Skybee

    Спасибо огромное! Долго бился в поисках над этим вопросом. Наконец-то поиск работает так как хочется :grin:
    Только в примере там одно слово «COLLATE» лишнее

  • http://tm-sidhi.narod.ru vab

    Еще можно прописать кодировку непосредственно на таблице/столбце. Вполне возможно, что это будет более хорошим решением, если идет речь о следование стандартам ANSI в SQL.

  • http://dev.ezoterik.info ezoterik

    Skybee,
    Спасибо, поправил.

    vab,
    Получается, что да, такой «фейк» в большинстве случаев свидетельствует о не правильном изначальном проектировании БД.
    Но как экстремальный вариант, возможность полезная :-) Можно ведь это применить не только относительно регистра, но и использовать для каких-то «извращенных» операций в таблице, с кодировками, которые не являются для нее «родными» :-)
    Интересно насколько оператор COLLATE ресурсоёмок.

  • Krot

    Спасибо вот за такие маленькие но очень нужные подсказки!