REGEXP в MySQL не понимает кириллицу в квадратных скобках. Как исправить?

Действительно, в MySQL REGEXP по умолчанию не понимает кириллицу в квадратных скобках. Однако существует несколько способов исправить эту проблему.

  1. Использование передового (collation-aware) регулярного выражения:
  • Вам следует проверить, какие collation используются в базе данных, таблице и столбце, в котором вы выполняете поиск. Collation определяет правила сравнения и сопоставления для текстовых данных в MySQL.
  • Для поддержки кириллицы в квадратных скобках вы можете использовать collation с UTF-8. Например, для столбца name с collation utf8generalci вы можете использовать следующее выражение:

SELECT * FROM table WHERE name REGEXP '[а-яА-Я]';

  • Учтите, что не все collation поддерживают кириллические символы в регулярных выражениях. Если у вас не работает utf8generalci, вам может потребоваться использовать другой collation, который поддерживает кириллические символы.
  1. Использование POSIX регулярного выражения:
  • В MySQL также поддерживаются POSIX регулярные выражения, которые не имеют этой проблемы с кириллицей в квадратных скобках.
  • Для поиска кириллических символов вы можете использовать выражение типа:

SELECT * FROM table WHERE name REGEXP '[[.alpha.]]';

  • В этом случае "[.alpha.]" будет соответствовать любой кириллической букве.
  1. Использование HEX() функции:
  • Вместо использования кириллических символов в регулярных выражениях вы можете использовать HEX() функцию для преобразования символов в их шестнадцатеричное представление.
  • Например, для поиска кириллических символов от А до Я вы можете использовать следующее выражение:

SELECT * FROM table WHERE HEX(name) REGEXP '^D[0-9A-F]{2,}$';

  • Здесь "^D[0-9A-F]{2,}$" соответствует кириллическим символам от А (в HEX представлении - D090) до Я (в HEX представлении - D09F).

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