为何MariaDB 10.2中RLIKE在二进制字符集下匹配á与è?
MariaDB RLIKE操作符处理二进制字符串的匹配异常
- 涉及版本:MariaDB 10.2.13、10.3.39
- 异常现象:使用RLIKE操作符检查二进制字符串
á中是否存在字符è时,返回结果为true,对应测试语句:convert('á' using binary) RLIKE '[è]': 1
以下是完整的查询语句及执行结果:
(root@127.0.0.1:3306) [test]> select char(50081), char(50088), hex(char(50081)), hex('á'), char(50081) RLIKE '[è]', char(50088) RLIKE '[á]', convert(char(50088) using utf8) RLIKE '[á]', convert(char(50088) using utf8mb4) RLIKE '[á]', convert('á' using binary) RLIKE '[è]', 'á' RLIKE '[è]' \G *************************** 1. row *************************** char(50081):á char(50088):è char(50081)的十六进制值:C3A1 'á'的十六进制值:C3A1 char(50081) RLIKE '[è]':1 char(50088) RLIKE '[á]':1 convert(char(50088) using utf8) RLIKE '[á]':0 convert(char(50088) using utf8mb4) RLIKE '[á]':0 convert('á' using binary) RLIKE '[è]':1 'á' RLIKE '[è]':0 1 row in set (0.00 sec)
从结果可以看出:
- 当字符串以二进制类型进行RLIKE匹配时,出现了不符合预期的跨字符匹配(
á和è互相匹配成功) - 当字符串转换为utf8或utf8mb4编码后再进行RLIKE匹配,结果恢复正常(返回0,表示不匹配)
内容的提问来源于stack exchange,提问作者Ela
相关产品推荐
相关产品推荐

