Может кто-нибудь подскажет мне как в mysql сделать чтобы полнотекстовый поиск был регистронезависимым для русского языка. Данные хранятся в utf8 и для полей по которым идет поиск выбрано utf8_general_ci
Здравствуйте, ahabr, Вы писали:
A>Может кто-нибудь подскажет мне как в mysql сделать чтобы полнотекстовый поиск был регистронезависимым для русского языка. Данные хранятся в utf8 и для полей по которым идет поиск выбрано utf8_general_ci
Не уверен в своей правоте, но напишу соображения.
MySQL 5.0 не поддерживает русский язык в utf8. (имеется в виду операции uppercase(), lowercase(), сортировка, и Ignoring diacritics (т.е. не различать при поиске 'е' и 'ё' — иногда полезно искать не задумываясь о том как ввели в базу "Звездный" или "Звёздный"))
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
Почему я так думаю?
Заглянув в исходники, вижу, что в utf8_general_ci описываются операции с 255 байтами (usa7), что явно не достаточно чтобы покрыть русский язык.
Почему не поддерживает?
В русскоговорящих странах нет ни коммьюнити, ни пользователей которые платят деньги за mysql (а если и есть, то они не требуют такой фичи)
Почему не пользуются системными (Windows) функциями?
Наверно потому же, что и предыдущее.
Что делать? (если не нашли свой язык в <show collation like 'utf8%'> )
Либо:
1. Самому сделать utf8_russian_ci (или заюзать системные чарсеты) в MySQL и собрать версию (и не забыть послать патч в MySQL)
2. Заплатить кому-то денег чтобы он это сделал
3. "Надавить" на MySQL и доказать что они должны это сделать сами
4. Забить
Welcome to opensource
(но предварительно обратиться в MySQL support, может я тут нагнал)
goldblueranger пишет:
> Не уверен в своей правоте, но напишу соображения.
> MySQL 5.0 не поддерживает русский язык в utf8. (имеется в виду операции
> uppercase(), lowercase(), сортировка, и Ignoring diacritics (т.е. не
Поддерживает. MySQL там все по Unicode-стандарту реализует, так что
все должно работать.
> Почему не поддерживает?
> В русскоговорящих странах нет ни коммьюнити, ни пользователей которые
> платят деньги за mysql (а если и есть, то они не требуют такой фичи)

Ага, а что наверное половина разработчиков MySQL — русские — это ничего ?
> Почему не пользуются системными (Windows) функциями?
Потому что MySQL не только на винде работает.
> Что делать? (если не нашли свой язык в <show collation like 'utf8%'> )
Да все там работает, надо правильно настроить нечувствительную к
регистру кодировку.
Posted via RSDN NNTP Server 2.1 beta
MZ>все должно работать.
упс, прогнал я дйствительно в EMS SQL Manager этот скрипт пашет на ура (у меня была ошибка в тестовом примере)
drop table if exists rus;
create table rus (name varchar(50) CHARACTER SET utf8 );
insert into rus values('Слово');
select name from rus where UPPER(NAME) like 'СЛ%' ;
Здравствуйте, goldblueranger, Вы писали:
G>Здравствуйте, ahabr, Вы писали:
A>>Может кто-нибудь подскажет мне как в mysql сделать чтобы полнотекстовый поиск был регистронезависимым для русского языка. Данные хранятся в utf8 и для полей по которым идет поиск выбрано utf8_general_ci
G>Не уверен в своей правоте, но напишу соображения.
G>MySQL 5.0 не поддерживает русский язык в utf8. (имеется в виду операции uppercase(), lowercase(), сортировка, и Ignoring diacritics (т.е. не различать при поиске 'е' и 'ё' — иногда полезно искать не задумываясь о том как ввели в базу "Звездный" или "Звёздный"))
G>http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
G>Почему я так думаю?
G>Заглянув в исходники, вижу, что в utf8_general_ci описываются операции с 255 байтами (usa7), что явно не достаточно чтобы покрыть русский язык.
G>Почему не поддерживает?
G>В русскоговорящих странах нет ни коммьюнити, ни пользователей которые платят деньги за mysql (а если и есть, то они не требуют такой фичи)
G>Почему не пользуются системными (Windows) функциями?
G>Наверно потому же, что и предыдущее.
G>Что делать? (если не нашли свой язык в <show collation like 'utf8%'> )
G>Либо:
G>1. Самому сделать utf8_russian_ci (или заюзать системные чарсеты) в MySQL и собрать версию (и не забыть послать патч в MySQL)
G>2. Заплатить кому-то денег чтобы он это сделал
G>3. "Надавить" на MySQL и доказать что они должны это сделать сами
G>4. Забить
G>Welcome to opensource
G>(но предварительно обратиться в MySQL support, может я тут нагнал)
Здравствуйте, goldblueranger, Вы писали:
G>Здравствуйте, ahabr, Вы писали:
A>>Может кто-нибудь подскажет мне как в mysql сделать чтобы полнотекстовый поиск был регистронезависимым для русского языка. Данные хранятся в utf8 и для полей по которым идет поиск выбрано utf8_general_ci
G>Не уверен в своей правоте, но напишу соображения.
G>MySQL 5.0 не поддерживает русский язык в utf8. (имеется в виду операции uppercase(), lowercase(), сортировка, и Ignoring diacritics (т.е. не различать при поиске 'е' и 'ё' — иногда полезно искать не задумываясь о том как ввели в базу "Звездный" или "Звёздный"))
G>http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
G>Почему я так думаю?
G>Заглянув в исходники, вижу, что в utf8_general_ci описываются операции с 255 байтами (usa7), что явно не достаточно чтобы покрыть русский язык.
G>Почему не поддерживает?
G>В русскоговорящих странах нет ни коммьюнити, ни пользователей которые платят деньги за mysql (а если и есть, то они не требуют такой фичи)
G>Почему не пользуются системными (Windows) функциями?
G>Наверно потому же, что и предыдущее.
G>Что делать? (если не нашли свой язык в <show collation like 'utf8%'> )
G>Либо:
G>1. Самому сделать utf8_russian_ci (или заюзать системные чарсеты) в MySQL и собрать версию (и не забыть послать патч в MySQL)
G>2. Заплатить кому-то денег чтобы он это сделал
G>3. "Надавить" на MySQL и доказать что они должны это сделать сами
G>4. Забить
G>Welcome to opensource
G>(но предварительно обратиться в MySQL support, может я тут нагнал)
Воистину так! Вот ж...
Здравствуйте, ahabr, Вы писали:
A>Может кто-нибудь подскажет мне как в mysql сделать чтобы полнотекстовый поиск был регистронезависимым для русского языка. Данные хранятся в utf8 и для полей по которым идет поиск выбрано utf8_general_ci
Вот тут нормально написано,
http://www.phpwact.org/php/i18n/utf-8/mysql
А чел тут наверху философию не по-теме развел, ужас!
Если вкратце основная проблема — перекодировка. Твои таблицы могут быть и юникод, но от клиента приходят в неверном формате, по дефолту у мускула — latin1, и в итоге у тебя в базе хранятся кракозябры — данные кодировки latin1 сохраненные в юнкоде

так что set names 'utf8' как в статье написано, спасет отца русской демократии
Здравствуйте, goldblueranger, Вы писали:
G>MySQL 5.0 не поддерживает русский язык в utf8. (имеется в виду операции uppercase(), lowercase(), сортировка, и Ignoring diacritics (т.е. не различать при поиске 'е' и 'ё' — иногда полезно искать не задумываясь о том как ввели в базу "Звездный" или "Звёздный"))
А если поставить collation в utf8_unicode_ci?
select 'Звёздный' = 'Звездный', 'Звёздный' = 'Звездячий'
+---+---+
| 1 | 0 |
+---+---+