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

MariaDB中JSON_UNQUOTE无法处理表情符号?如何用SQL提取值

解决MySQL中JSON_UNQUOTE返回Unicode表情符号为?的问题

核心解决方案

  • 使用JSON_VALUE直接解析JSON字符串中的值,它能正确处理Unicode转义序列:

    SELECT JSON_VALUE('"\\ud83d\\ude0a"', '$');
    

    执行后会返回正确的😊表情符号。

  • 若坚持使用JSON_UNQUOTE,需先将字符串转换为JSON类型再处理,确保MySQL正确解析代理对转义:

    SELECT JSON_UNQUOTE(CAST('"\\ud83d\\ude0a"' AS JSON));
    

    或者结合JSON_EXTRACT使用:

    SELECT JSON_UNQUOTE(JSON_EXTRACT('"\\ud83d\\ude0a"', '$'));
    

问题原因

你遇到的?是因为\\ud83d和\\ude0a是UTF-16的代理对字符,单独的代理字符不属于有效的utf8mb4编码字符。直接用JSON_UNQUOTE处理字符串字面量时,MySQL没有将其当作JSON结构解析,而是直接转义单个代理字符,导致无效字符被替换为?。而JSON_VALUE或先转换为JSON类型后,MySQL会将这两个转义序列合并为一个完整的、有效的utf8mb4表情符号字符。

额外注意事项

如果是从varchar列中读取JSON,确保存储的JSON字符串格式正确,建议插入时使用JSON_OBJECT等JSON函数生成,避免手动转义出错:

INSERT INTO your_table (json_column) VALUES (JSON_OBJECT('emoji', '😊'));

后续读取时直接用JSON_VALUE(json_column, '$.emoji')即可获取正确值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:40:02