如何执行多字节安全SQL REGEXP查询?

时间:2018-02-16 10:39:02

标签: mysql sql mariadb

我有以下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查询?

1 个答案:

答案 0 :(得分:0)

MariaDB更好地支持REGEXP。

在MySQL中,这将测试具有任何重音字符的word

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

^(..)*是为了确保后续测试是字节(2个十六进制字符)对齐。

您可以通过执行类似

的操作来查看这些utf8编码
SELECT HEX('áäčďéóú');

(您对LIKE的尝试应该说OR而不是AND。)