You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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('𣅀')中字符显示为?

该问题与数据库无关,是本地终端的字符支持问题:

  1. 确认终端字符集为UTF-8:执行echo $LANG,输出应为zh_CN.UTF-8类格式。
  2. 更换支持完整CJK字符的字体:多数默认字体不包含CJK扩展B区生僻字,可改用Noto Sans CJK SC、思源黑体等字体。
  3. 注:虽然终端显示为?,但hex()返回的F0A38580是正确的,说明数据库已正确存储和处理该字符,仅终端无法渲染显示。

额外注意事项

  • 你的字符集配置已正确,无需调整character_set_*相关参数。
  • MyISAM引擎对utf8mb4支持完整,若后续有事务需求,建议改用InnoDB引擎。

内容的提问来源于stack exchange,提问作者Usaginomimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:08:12