@mes01

Как реализовать регистронезависимый поиск в MySQL?

В общем не знаю как сделать регистронезависимый поиск в MySQL

Запрос выглядит у меня так:
SELECT * FROM items WHERE (item_name LIKE '%".$v."%' OR item_description LIKE '%$v%' OR item_keywords LIKE '%$v%') ORDER BY item_id DESC


В базе есть запись "Блокнот"
При запросе с условием $v=блокнот получаем нулевой результат, а если условие $v=Блокнот то запись находится

496eed44d2dc45f2a3feba901776406e.png44aab336951c4689b62786bf9617ad95.png330f2da7c49149e2bac64b99c1f0a752.pnge1ec14e8cb1b41feabf26a84dad2f685.png

Вопрос: Как сделать так что бы при запросе блоКноТ, mysql возвращал не пустой результат?
  • Вопрос задан
  • 5759 просмотров
Пригласить эксперта
Ответы на вопрос 3
@IceJOKER
Web/Android developer
а кодировка какая?
установите к примеру - utf8_general_ci - ci в конце означает CASE INSESITIVE , то есть регистронезависимый
Ответ написан
@hurgadan
операторы = и like сами по себе к регистру не имеют отношения. Это зависит от того, какой колейшен указан для поля. Если вы используете кодировку UTF8, то к примеру это может быть:
xxx_bin
xxx_unicode_ci
xxx_genereal_ci
Пускай речь идет о UTF8.
При использовании uft8_general_ci буквы е, ё, Е и Ё - это одно и тоже.
utf8_unicode_ci - буквы е и ё - это разные буквы, но нет различный в строчных и заглавных. Кроме того для некоторых языков, поддерживаются expansions, например в немецком ss тоже самое что ß.

подробно тут: dev.mysql.com/doc/refman/5.0/en/charset-unicode-se...
Ответ написан
Комментировать
UnknownHero
@UnknownHero
Можно и так
$v = strtolower($v)
или mb_strtolower , если проблема с кодировками

SELECT * FROM items WHERE ( LOWER(item_name) LIKE %".$v."%' OR LOWER(item_description) LIKE '%$v%' OR LOWER(item_keywords) LIKE '%$v%' ) ORDER BY item_id DESC


те переводим всё в один регистр и сравниваем
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы