Как выполнить многобайтовый безопасный запрос SQL REGEXP?

0

У меня есть следующий SQL-запрос, чтобы найти словарные слова, содержащие конкретные буквы.

Он отлично работает в английском словаре:

SELECT word
FROM english_dictionary
WHERE word REGEXP '[abcdef]'

Но работать с одним и тем же запросом на словацкий словарь, который включает специальные буквы с акцентом UTF8, не работает.

SELECT word
FROM slocak_dictionary
WHERE word REGEXP '[áäčďéóú]'

Я искал везде, не могу найти ответ на этот вопрос. Если я использую LIKE, он работает, но запрос становится очень уродливым:

SELECT word
FROM slocak_dictionary
WHERE 
word LIKE '%á%'
AND word LIKE '%ä%'
AND word LIKE '%č%'
AND word LIKE '%ď%'
AND word LIKE '%é%'
AND word LIKE '%ó%'
AND word LIKE '%ú%'

Потому что я имею дело со многими буквами, которые нужно исключить или включить в запрос, сломав его, как будто это не очень элегантно.

Есть ли способ выполнить многобайтовый безопасный SQL REGEXP-запрос в MySQL?

Теги:
mariadb

1 ответ

0

MariaDB имеет лучшую поддержку REGEXP.

В MySQL это проверит word имеющее любой из этих акцентированных символов:

HEX(word) REGEXP '^(..)*(C3A1|C3A4|C48D|C48F|C3A9|C3B3|C3BA)'

^(..)* состоит в том, чтобы убедиться, что последующий тест равен байту (2 шестнадцатеричных символа).

Вы можете видеть эти кодировки utf8, делая что-то вроде

SELECT HEX('áäčďéóú');

(Ваша попытка с LIKE должна была указать OR вместо AND.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню