#mysql #база_данных #регулярные_выражения #кодировка
Здравствуйте. В БД установлена кодировка utf8. Когда я пишу запрос, используя регулярные выражения, они не работают. Обычные запросы работают: SELECT * FROM verb.tableA WHERE rw LIKE 'небо'; Но когда пишу SELECT * FROM verb.tableA WHERE rw RLIKE '^неб[оа]$';, то ничего не выводится. Почему так происходит?
Ответы
Ответ 1
Обновлено Как правильно меня поправили в комментариях, выражение у вас правильное, а вот MySql не правильно его обрабатывает. В вашем случае можно такой вариант использовать: '^неб(о|а)$' Все дело в особенности обработки выражений в MySql. Обработка идет побайтово, и поэтому ваш вариант не работает. Цитата из документации Warning The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.Ответ 2
Используйте REGEXP SELECT * FROM verb.tableA WHERE rw REGEXP "^неб(a|о)$"; Хотя возможно условие через OR будет работать быстрее SELECT * FROM verb.tableA WHERE rw="небо" OR rw="неба";
Комментариев нет:
Отправить комментарий