@WebforSelf

Проблема с regexp на mysql 8.0.26?

В коде php есть функция regexp которая на 5.7. mysql работает как надо.
$show_filter_array[$k] = $this->db->placehold($k." regexp '[[:<:]](?)[[:>:]]'", intval($show_filter_array[$k]));

Перенес сайт на другой сервер
После этого функция перестала работать на mysql 8.0.26
В 8 версии поменялась логика работы с regexp
Пробовал сделать так
$show_filter_array[$k] = $this->db->placehold($k." regexp '\\b(?)\\b'", intval($show_filter_array[$k]));

Но все равно не работает. Откатиться на старый мускус не вариант, т.к. там уже работает другой сайт.
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Согласно MySQL 5.7 Reference Manual / ... / Regular Exp...

[[:<:]], [[:>:]]

These markers stand for word boundaries.


Согласно MySQL 8.0 Reference Manual / ... / Regular Exp...

The Spencer library supports word-beginning and word-end boundary markers ([[:<:]] and [[:>:]] notation). ICU does not. For ICU, you can use \b to match word boundaries; double the backslash because MySQL interprets it as the escape character within strings.


Так что подход правильный.

Но Вы не учитываете, что слэш надо квотить как для PHP, так и для MySQL. Т.е. их должно быть не два, а четыре.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы