У меня есть следующий 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 имеет лучшую поддержку REGEXP.
В MySQL это проверит word
имеющее любой из этих акцентированных символов:
HEX(word) REGEXP '^(..)*(C3A1|C3A4|C48D|C48F|C3A9|C3B3|C3BA)'
^(..)*
состоит в том, чтобы убедиться, что последующий тест равен байту (2 шестнадцатеричных символа).
Вы можете видеть эти кодировки utf8, делая что-то вроде
SELECT HEX('áäčďéóú');
(Ваша попытка с LIKE
должна была указать OR
вместо AND
.)