我需要在数据库中查询仅包含一组特定 Unicode 日语字符而不包含其他内容的条目。
我尝试过使用 WHERE word RLIKE '^([あいうえお])+$'
但这不适用于日语,因为 MySQL 的正则表达式缺乏 Unicode 支持。
还有其他方法可以实现这一点吗?
最佳答案
MySQL 将每个字符视为字节序列,因此 あ
是 0xE3、0x81、0x82,而您的 [あいうえお]
实际上正在寻找任何字节序列 0xE3 、0x81、0x82、0x84、0x86、0x88 和 0x8A。这将很好地匹配 あ
,但它也会匹配与列表中的单个字符不对应的其他序列,例如 0xE3、0x82、0x81,即 め
.
当正则表达式引擎将每个字符视为多个符号时,[あいうえお]
的另一种表达方式仍然有效,即 (あ|い|う|え|お)
.
SELECT 'あ' RLIKE '^([あいうえお])+$'; -- 1
SELECT 'め' RLIKE '^([あいうえお])+$'; -- 1
SELECT 'あ' RLIKE '^(あ|い|う|え|お)+$'; -- 1
SELECT 'め' RLIKE '^(あ|い|う|え|お)+$'; -- 0
关于MySQL 字符串仅包含某些 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572895/