Исходные данные: Ubuntu server 9.04 + MySQL 5.1.x, была какая-то база MBASE с таблицей abase, в которую вносились данные в кодировке utf8, все запросы происходили посредством самописных Perl скриптов.
Так сложилось, что появилась необходимость использовать регистронезависимый поиск.
Самым простым способом реализации регистронезависимого поиска, является преобразование строки поиска и значения поля(ей) таблиц к верхнему(upper) или нижнему(lower) регистру.
Пример банального SELECT-а ввыглядит бля таблици abase так:
select * form abase where locate(lower('ЯбЛо'),lower(message0))>0;
т.е. строка поиска "ЯбЛо" и значение в поле message0 таблицы abase преобразовывается
к нижнему регистру и ищется вхождение.
К сожалению поиск не работал. Однако, не работал для кирилических символов, т.е. регистрозависимый в стиле:
select * form abase where messages0 LIKE 'Ябло%';
отрабатывал, но как только использовалось преобразование регистров, переставал работать.
Залогинившись mysql -uroot -ppass побросал запросы напрямую - увидел, что после использования функций преобразования регитров символов, отдает какю-то ересь из квадратиков.
Погуглив, нашел подсказку в указании кодировки по-умолчание в файле конфигурации MySQL:
[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8
[client]
default-character-set = utf8
Вписав эти инструкции и перегрузив сервер MySQL сервер, получил еще ведро ошибок в стиле:
'Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)'
Вобщем, плохо все, нашел совет перекодировать:
alter table `abase` convert to character set utf8
collate utf8_swedish_ci;
Однако, то ли я не разобрался, то ли еще почему-то, но не получилось.
На самом деле, нужно просто правильно создавать базы вначале с указанием правильных кодировок:
CREATE DATABASE vizor CHARACTER SET utf8 COLLATE utf8_general_ci;
Тогда и проблем не будет.
Пошел, скорей неправильным путем, создавая правильно новую базу и экспортируя таблици из старой через mysqldump.
Немає коментарів:
Дописати коментар