Криво работает LIKE с полями на русском

Статус
В этой теме нельзя размещать новые ответы.

MurMyau

Новичок
Криво работает LIKE с полями на русском

Добрый день!
Прочитала форум, тема русских кодировок обсуждается давно и упорно, но ответа для себя не нашла :(
На сайте есть поиск по фамилиям, регистронезависимый, разумеется. Он нормально работает для всех фамилий в базе, кроме тех, которые начинаются на "Ч"! Т.е. если набрать с большой буквы - все в порядке, а с маленькой буквы не находит %)
Как с это вылечить???

Кодировка в базе latin1_swedish_ci.

Запрос такой:
PHP:
SELECT user_id, user_name, user_email, user_rusname, user_job, user_phone, user_phonecity, user_mob
FROM users
WHERE user_status=0 AND user_rusname LIKE '%".$_GET["filterName"]."%' 
ORDER BY user_rusname collate latin1_bin
 

WP

^_^
utf8_general_ci поставь (ну, или cp1251_general_ci, хотя юникод рулит)
 

WP

^_^
Mr_Max
> LIKE это зло.
С чего вдруг? Да, индексы не юзаются с LIKE '%...%'.
> PHP FAQ: \"Кавычки \". Cоставление запросов, слеши, SQL Injection
А может magic_quotes_gpc = on ;)
 

MurMyau

Новичок
Автор оригинала: WP
utf8_general_ci поставь (ну, или cp1251_general_ci, хотя юникод рулит)
в базе много записей... как корректно сконвертировать? и будут ли работать скрипты, которые для latin1 написаны? ;)
 

phpdev2007

Новичок
MurMyau
Установить кодировку клиента первым запросом к базе данных, смотрите по форму таких примеров куча, в какой кодировке написаны скрипты роли не играет. Плюс выключить автоматическое слеширования, и экранировать данные в ручном режиме.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
phpdev2007
а погуглить? ;)
 

Фанат

oncle terrible
Команда форума
WP
> PHP FAQ: \"Кавычки \". Cоставление запросов, слеши, SQL Injection
А может magic_quotes_gpc = on
может. по ссылке все написано.
или ты против того, чтобы MurMyau её читала?


MurMyau
latin1_swedish_ci - не кодировка, а сортировка.

НИЧЕГО по советам этих горемык ставить НЕ НАДО! Потеряешь данные нахрен.
будут ли работать скрипты, которые для latin1 написаны?
Скриптов у тебя никаких для latin1 не написано. следовательно, сами скрипты работать будут. А вот база - нет.

Читай здесь: PHP FAQ: Проблемы с кодировкой в MySQL версий 4.1+
там все написано.
Если все равно ответа для себя не найдешь - сообщи.
 

phpdev2007

Новичок
Mr_Max
что мне гуглить? не смешите ок.

-~{}~ 26.11.07 20:02:

*****
latin1_swedish_ci это и сортировка и кодировка!
 

MurMyau

Новичок
Автор оригинала: *****
MurMyau
latin1_swedish_ci - не кодировка, а сортировка.

НИЧЕГО по советам этих горемык ставить НЕ НАДО! Потеряешь данные нахрен.

Скриптов у тебя никаких для latin1 не написано. следовательно, сами скрипты работать будут. А вот база - нет.

Читай здесь: PHP FAQ: Проблемы с кодировкой в MySQL версий 4.1+
там все написано.
Если все равно ответа для себя не найдешь - сообщи.
Спасибо!
Но все рекомендации для случая, если русские буквы не выводятся совсем... Но у меня сейчас есть рабочий сайт, где данные вводятся/выводятся из базы, все в порядке для существующих настроек, поэтому изменять что-то глобально НЕ ХОЧУ.
Но вот с фильтром проблема... и нашли ее совершенно случайно - с буквы "Ч" не так много фамилий начинается... Есть какие-то идеи?
 

Фанат

oncle terrible
Команда форума
Есть. Все они описаны по ссылке.
Поэтому рекомендуется прочитать ещё раз, и сделать при этом две вещи.
1. Попытаться ПОНЯТЬ, что там написано. Чтобы ответить себе на свой вопрос, "есть какие-то идеи?" самостоятельно.
2. Если не получится - прочитать практические рекомендации на тему, что надо делать, чтобы заработал поиск-сортировка.
все рекомендации для случая, если русские буквы не выводятся совсем...
вот только фигню не надо писать.
 

MurMyau

Новичок
Автор оригинала: *****
Есть. Все они описаны по ссылке.
Поэтому рекомендуется прочитать ещё раз, и сделать при этом две вещи.
1. Попытаться ПОНЯТЬ, что там написано. Чтобы ответить себе на свой вопрос, "есть какие-то идеи?" самостоятельно.
2. Если не получится - прочитать практические рекомендации на тему, что надо делать, чтобы заработал поиск-сортировка.

вот только фигню не надо писать.
идей было несколько:
1. изменить общую кодировку "set names чего-нибудь", но при других кодировках (utf8, cp1251, koi8r) русские буквы на сайте не отображаются
2. С сортировкой проблем нет "ORDER BY user_rusname collate latin1_bin"
3. я плохо знаю mysql и как работать с его кодировками и сортировками (вроде как регистронезависимыми?), поэтому решаю вопрос так:
PHP:
UPPER(user_rusname) LIKE '%".strtoupper($_GET["filterName"])."%' "
Проблема решена, но ясности с кодировками/сортировками нет...
 

Фанат

oncle terrible
Команда форума
upper тоже не будет, разумеется, правильно работать при неверной кодировке.

Проблема решена будет после того, как кодировка таблиц будет изменена. Это единственное решение проблемы.

-~{}~ 27.11.07 12:29:

изменить общую кодировку "set names чего-нибудь",
это никакого отношения к кодировке ТАБЛИЦ не имеет. что и написано по ссылке.
Проблема решена, но ясности с кодировками/сортировками нет...
Ну что еще не ясно-то? Все же разжевано.
сортировка и поиск завязаны на кодировку.
если стоит неверная кодировка, поиск работать не будет.
данные должны лежать в таблице с правильно указанной кодировкой.
Неужели это непонятно написано?
 

Kukin86

Новичок
Та же проблема. Но только mysql 4.0 Возможности сменить нет. Поиск проводиться полностью регистрозависимый
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
- доктор у меня зуб болит
- лечить нужно
- нехочу.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху