Поиск без учета регистра
Веб-разработка 24.11.2007Как-то раз проглядел, что у меня в базе данных сравнение строк было регистро-зависимым (cp1251_general_cs). К примеру, при запросе:
SELECT * FROM name_table WHERE name LIKE '%Слово%'
Находились только те записи, в которых буква “С” была большой, а все остальные буквы должны были быть в нижнем регистре.
Чтобы произвести регистро-независимый поиск нужно было делать следующий запрос:
SELECT * FROM name_table WHERE name LIKE '%Слово%' COLLATE cp1251_general_ci

(2 голосов, средний: 4.5 из 5)
18.06.2008 в 20:10
Спасибо огромное! Долго бился в поисках над этим вопросом. Наконец-то поиск работает так как хочется
Только в примере там одно слово “COLLATE” лишнее
24.06.2008 в 14:19
Еще можно прописать кодировку непосредственно на таблице/столбце. Вполне возможно, что это будет более хорошим решением, если идет речь о следование стандартам ANSI в SQL.
24.06.2008 в 15:49
Skybee,
Спасибо, поправил.
vab,
Можно ведь это применить не только относительно регистра, но и использовать для каких-то “извращенных” операций в таблице, с кодировками, которые не являются для нее “родными”
Интересно насколько оператор COLLATE ресурсоёмок.
Получается, что да, такой “фейк” в большинстве случаев свидетельствует о не правильном изначальном проектировании БД.
Но как экстремальный вариант, возможность полезная