MariaDB中UTF8MB4汉字LIKE查询匹配异常及字符显示问题排查
解决MariaDB中utf8mb4字符的LIKE匹配错误与显示问题
问题1:LIKE查询返回不符合预期的结果
LIKE '%𣅀%'返回两行数据的问题,根源是utf8mb4_general_ci排序规则的特性。这个早期的通用排序规则对Unicode扩展区的生僻汉字(比如你用到的𣅀、𡃀这类CJK扩展B区字符)没有做精确区分,会将编码或字形相近的字符视为等价,导致匹配范围扩大。
修复方案:
改用精确排序规则:
10.3及以上版本的MariaDB支持更精准的排序规则,可将表的排序规则改为utf8mb4_unicode_ci,或针对中文优化的utf8mb4_zh_unicode_ci(部分版本需额外安装字符集包)。修改语句:ALTER TABLE chartable MODIFY COLUMN k1 VARCHAR(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;调整后执行LIKE查询即可精确匹配目标字符。
临时二进制比较:
若不想修改表结构,可在查询时强制使用二进制匹配,严格按字符编码值比较,规避排序规则的影响:SELECT * FROM chartable WHERE BINARY k1 LIKE '%𣅀%';
问题2:SELECT hex('𣅀')中字符显示为?
该问题与数据库无关,是本地终端的字符支持问题:
- 确认终端字符集为UTF-8:执行
echo $LANG,输出应为zh_CN.UTF-8类格式。 - 更换支持完整CJK字符的字体:多数默认字体不包含CJK扩展B区生僻字,可改用Noto Sans CJK SC、思源黑体等字体。
- 注:虽然终端显示为?,但
hex()返回的F0A38580是正确的,说明数据库已正确存储和处理该字符,仅终端无法渲染显示。
额外注意事项
- 你的字符集配置已正确,无需调整
character_set_*相关参数。 - MyISAM引擎对utf8mb4支持完整,若后续有事务需求,建议改用InnoDB引擎。
内容的提问来源于stack exchange,提问作者Usaginomimi
相关产品推荐
相关产品推荐

