2013-05-03 2 views
3

Если я хочу, чтобы найти все данные со строки léon в name поле, я использую запрос, как это:REGEXP с MySQL не работает должным образом

SELECT * FROM `my_table` WHERE `name` REGEXP 'léon' 

Этот запрос OK.

Теперь мне нужно получить все строки со строкой léon или leon или lèon, поэтому я попытался:

SELECT * FROM `my_table` WHERE `name` REGEXP 'l[éeè]on' 

Этот запрос не работает ... У меня нет ошибки, но результата нет. У тебя есть идеи?

+2

Это работает для меня ... Может быть, вещь версии? В какой версии MySQL вы работаете? – LeonardChallis

+0

если я пытаюсь использовать SELECT * FROM 'my_table' WHERE' name' REGEXP 'lé [o] n', все в порядке. Так что это не проблема с версией, я думаю. –

+0

Кажется, что не работает в скрипте - http://sqlfiddle.com/#!2/78eb95/3 – sgeddes

ответ

0

От docs:

Операторы REGEXP и операторы RLIKE работы в побайтно моды, поэтому они не многобайтные и может привести к непредсказуемым результатам с многобайтный наборов символов. Кроме того, эти операторы сравнивают символы на , их байтовые значения и акцентированные символы могут не сравниваться как равные , даже если данная сортировка рассматривает их как равные.

Что вы могли бы попробовать обрабатывает многобайтовый характер, как этот, так что обрабатывает 1 байт или 2. Это не будет совершенным, потому что он будет Матчин на «лев», например, но может получить вас ближе.

REGEXP 'l.{1,2}on' 

Другое дело, что может влиять вас так, что REGEXP работает в MySQL является то, что имеются в виду символы на конце, потому что вы не указав начало и конец так

REGEXP 'l[éeè]on' 

является эквивалент

REGEXP '^.*l[éeè]on.*$' 

Это значит, что вы возможно совместимы с тем, что ожидается. Похоже, ваша проблема - это первый сценарий, который я упоминаю

Смежные вопросы