Почему перестало работать регулярное выражение в более новой версии mysql?

Ссылка скопирована
1 ответ

Здравствуйте, подскажите почему перестало работать регулярное выражение, после смены версии mysql? Поставил 8 версию, была 6

[[:<:]]111,222,333[:>:]
#3685 - Illegal argument to a regular expression.

чем его заменить можно?

Дополнительно:

Поставил 8 версию, была 6

Шестой версии у MySQL никогда не было. Во всяком случае если речь о Community Server.

  • поле fieldset может содержать до 200 таких категорий указанных через запятую

    Почему вы не используете списки?

  • Ответы:

    RTFM: https://dev.mysql.com/doc/refman/8.0/en/regexp.htm...

    Prior to MySQL 8.0.4, MySQL used the Henry Spencer regular expression library to support regular expression operations, rather than International Components for Unicode (ICU).
    ...
    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.

    \b111,222,333\b

    • Rsa97, спасибо большое, но это работает не так, как работало старое выражение, в поле содержатся номера категорий типа 0, 101,103 это выражение раньше искало совпадения, теперь находит только одно со значением 0 и указывает на ошибку Warning: #1292 Truncated incorrect DOUBLE value: '101,103' не понимаю, что не так
    • viktorross, Приведите воспроизводимый пример. CREATE TABLE, INSERT INTO (3-5 записей), текст запроса, его результат в "старой" и "новой" версиях MySQL (через CLI). Точно укажите обе версии (покажите вывод SELECT @@version;).
    • viktorross, Не так - список категорий через запятую в одном поле. Для связи многие-ко-многим надо использовать отдельную таблицу.
      По ошибке - покажите пример с данными, запросом и ожидаемым ответом.
    • Rsa97,
      select * from `class_fields` LEFT JOIN `class_fields_lang` on `class_fields`.`id` = `class_fields_lang`.`id` where `lang_id` = 'ru' and `active` = 1 and `quick_search` = 1 and ( `fieldset` REGEXP '\b103,105,107\b' or `fieldset` = 0 ) order by `order_no`;

      select * from `class_fields` LEFT JOIN `class_fields_lang` on `class_fields`.`id` = `class_fields_lang`.`id` where `lang_id` = 'ru' and `active` = 1 and `quick_search` = 1 and ( `fieldset` REGEXP '\b103,105,107\b' or `fieldset` = 0 ) order by `order_no`;

      старое выражение всегда искало поля где хотя бы одна категория соответствовала, само поле fieldset может содержать до 200 таких категорий указанных через запятую

    • viktorross,
      \b(?:111|222|333)\b
    • viktorross,

      само поле fieldset может содержать до 200 таких категорий указанных через запятую

      Жееесть, разработчик сам ушел, или его выпнули без выходного пособия?

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Проблема с регулярными выражениями в более новой версии MySQL может быть вызвана изменениями в реализации функций регулярных выражений или синтаксиса самого запроса.

    В новых версиях MySQL могли быть внесены изменения в реализацию функций регулярных выражений, что может привести к тому, что ваше регулярное выражение перестало работать. Вам следует проверить документацию по версии MySQL, которую вы используете, чтобы узнать об изменениях в функционале.

    Также возможно, что изменения были внесены в синтаксис запросов, связанных с регулярными выражениями. Обратите внимание на то, как вы используете регулярные выражения в ваших запросах и удостоверьтесь, что они соответствуют синтаксису новой версии MySQL.

    Для того чтобы решить проблему, вам может потребоваться изменить ваше регулярное выражение или запрос так, чтобы они соответствовали новой версии MySQL. Попробуйте переписать ваше выражение с учетом возможных изменений в функционале или синтаксисе.

    Пример использования регулярного выражения в запросе MySQL с помощью тега

    :
     
    <pre lang="php">
    SELECT * FROM table_name WHERE column_name REGEXP 'pattern';

    : <pre lang="php"> SELECT * FROM table_name WHERE column_name REGEXP 'pattern';

    Если после всех этих шагов ваше регулярное выражение все еще не работает, вам может потребоваться обратиться за помощью к сообществу MySQL или к специалистам по базам данных, чтобы выявить и решить проблему более детально.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно