|
|
|
| Воздникла следующая проблема:
Необходимо реализовать поиск по базе без учета регистра. Данные хранятся в utf8, база MySQL 4.0.2 . Реализую поиск оператором LIKE, в английской версии всё работает удачно, регистр не учитывается, в русской версии такого нет. Проверяла то же самое на MySQL 4.1 , такой проблемы нет - я так понимаю, там заплатку поставили разработчики. Но что делать в MySQL 4.0.2 . Помогите, пожалуйста, уже не первый раз сталкиваюсь с этой задачей и до сих пор не нашла решения. | |
|
|
|
|
|
|
|
для: dasha
(15.04.2006 в 23:31)
| | Там даже не заплатка, а полностью переработанная система кодировок и сортировок, причём настолько гибкая, что ещё не все коммерческие базы данных имеют аналоги. До версии 4.1 с национальными языками в MySQL работать достаточно сложно, тем более в UTF8 - нужно переходить на версию MySQL 4.1 (если есть возможность). | |
|
|
|
|
|
|
|
для: cheops
(16.04.2006 в 13:15)
| | К моему большому сожалению проапгрейдить MySQL пока не возможно, неужели совсем ничего нельзя сделать. Уже голову сломала что бы такое придумать, чтобы обойти эту проблему. Пишу на php, быть может какую-то функциональность возможно переложить на скрипт?. Буду очень благодарна совету | |
|
|
|
|
|
|
|
для: dasha
(16.04.2006 в 20:44)
| | Хм... вообще шансов извернуться не так много с UTF8, а у вас какая структура таблицы, что это - статьи, товарные позиции или что-то ещё? Что ищем? | |
|
|
|
|
|
|
|
для: cheops
(16.04.2006 в 21:11)
| | Есть таблица, в которой содержится поле типа varchar(255) - куда записывается фамилия, есть поле с id человека. Мне нужно выбрать id , где фамилия будет удовлетворять введённым символам без учета регистра. На данный момент, если я ищу человека по фамилии Петров, вводя соответствующее значение в поле формы, то из базы выбирается нужный id, а если я ищу петров , то никакого id естественно нет. Нужно это как-то побороть.
В данный момент упрощенно запрос выглядит так :
select id from table1 where binary(last_name) like '%.$temp.%' ;
где $temp - слово поиска | |
|
|
|
|
|
|
|
для: Dasha
(16.04.2006 в 22:59)
| | Можно попробовать искать все естественные формы - исходную, маленькими буквами, большими буквами, маленькими, начиная с большой:
$f1 = strtolower($temp) ;
$f2 = strtoupper($temp);
$f3 = ucfirst($temp);
$query = "select id from table1
where binary(last_name) like '%$temp%'
or binary(last_name) like '%$f1%'
or binary(last_name) like '%$f2%'
or binary(last_name) like '%$f3%' ";
|
Правда, если данные в UTF-8, не исключено, что преобразование символов придется обрамить преобразованием кодировок. Не уверен, что strtolower, strtoupper, ucfirst сами станут работать с UTF-8 | |
|
|
|