SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.11.2009 12:06:38

Владимир
Участник
Зарегистрирован: 10.11.2009
Сообщений: 10

Работа REGEXP с кириллицей в utf8

Всем доброго времени!
Имеется MySQL 5.1.32 под Linux в кодировке utf8 (и система, и БД, и таблицы).
Конструкция ...where name REGEXP '^qwe' честно возвращает и qwerty, и Qwerty.
Конструкция ...where name REGEXP '^абв' возвращает только абвгд.
Конструкция ...where name REGEXP '^Абв' возвращает только Абвгд.
Просьба проверить.
Собственно вопрос - как иначе организовать поиск в кириллице без учета регистра?

Неактивен

 

#2 17.11.2009 12:30:05

Владимир
Участник
Зарегистрирован: 10.11.2009
Сообщений: 10

Re: Работа REGEXP с кириллицей в utf8

Сам себе ответил - LIKE работает без учета регистра - вроде раньше не так было?

Неактивен

 

#3 17.11.2009 12:39:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Работа REGEXP с кириллицей в utf8

LIKE использует collation, по умолчанию utf8 использует utf8_generic_ci.
ci == case insensitive. А вот с регулярными выражениями — беда. Они
используют библиотеку, которая плохо разбирается в кодировках. В
частности RLIKE должен быть не чувствительным к регистру, но на практике
он не чувствителен только для латинских букв sad

Неактивен

 

#4 17.11.2009 13:56:01

Владимир
Участник
Зарегистрирован: 10.11.2009
Сообщений: 10

Re: Работа REGEXP с кириллицей в utf8

Спасибо!
Если я правильно понимаю, то установка collation в utf8_general_cs заставит LIKE учитывать регистр?
И еще - где-то проскакивало, что REGEXP работает быстрее LIKE - так ли это?

Неактивен

 

#5 17.11.2009 14:18:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Работа REGEXP с кириллицей в utf8

Сопоставление, учитывающее регистр, называется utf8_bin.

LIKE может использовать индекс, если ищет по началу строки (например,
LIKE 'word%'), REGEXP не использует индекс никогда. Так что утверждение
сомнительное smile

Неактивен

 

#6 17.11.2009 15:27:37

Владимир
Участник
Зарегистрирован: 10.11.2009
Сообщений: 10

Re: Работа REGEXP с кириллицей в utf8

Понял, еще раз спасибо!

Неактивен

 

#7 09.12.2009 18:16:29

freamer
Участник
Зарегистрирован: 09.12.2009
Сообщений: 1

Re: Работа REGEXP с кириллицей в utf8

Проставил utf8_bin базе,таблице и полю...
Ни LIKE,ни REGEXP не работают без учета регистра,даже с лат. символами.

Подскажите пожалуйста,в чем может быть проблема?
Версия сервера: 5.0.77-log

до того,как менял collation, REGEXP работал без учета регистра только с лат. символами,как и у автора сабжа.

UPDATE:
Извиняюсь, заранее не попробовал LIKE...
Вернул все обратно,на general_ci... LIKE -работает,как надо. странно.

спасибо большое за инфу) надеюсь никто на такие же грабли больше не наступит.

Отредактированно freamer (09.12.2009 18:21:01)

Неактивен

 

#8 26.12.2011 20:53:15

nikalas9
Участник
Зарегистрирован: 26.12.2011
Сообщений: 1

Re: Работа REGEXP с кириллицей в utf8

такой трюк нашел
$val = mb_strtolower($val,'UTF-8');
LOWER(text_name) REGEXP '[[:<:]]{$val}[[:>:]]'

ну '[[:<:]]{$val}[[:>:]]' это уже мне нужно было

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson