我有以下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 '%ú%'
因为我处理了许多需要被排除或包含在查询中的字母,所以将其分解为不是很优雅。
有没有办法在MySQL上执行多字节安全的SQL REGEXP查询?
答案 0 :(得分:0)
MariaDB更好地支持REGEXP。
在MySQL中,这将测试具有任何重音字符的word
:
HEX(word) REGEXP '^(..)*(C3A1|C3A4|C48D|C48F|C3A9|C3B3|C3BA)'
^(..)*
是为了确保后续测试是字节(2个十六进制字符)对齐。
您可以通过执行类似
的操作来查看这些utf8编码SELECT HEX('áäčďéóú');
(您对LIKE
的尝试应该说OR
而不是AND
。)