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

MySQL 5.6存储Emoji显示为问号的问题咨询

解决MySQL 5.6存储Emoji变为问号的问题

我碰到过好几个朋友遇到这个情况——明明表和字段都已经设成utf8mb4了,插入Emoji还是变成问号,核心问题几乎都是连接层的字符集没跟上,MySQL 5.6在这里有不少容易踩的坑,给你一步步排查解决:

1. 先检查数据库连接的字符集配置

这是最常见的原因!不管你用的是Java JDBC、PHP PDO还是其他语言的数据库驱动,连接字符串里必须明确指定utf8mb4:

  • 比如JDBC连接串要改成:
    jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8mb4
    
  • 如果是命令行登录MySQL,一定要加参数:
    mysql -u username -p --default-character-set=utf8mb4
    

要是连接的时候没指定utf8mb4,哪怕表是utf8mb4,数据在传输过程中还是会被转成utf8(最多3字节),Emoji这种4字节字符自然就变成问号了。

2. 验证MySQL的全局/会话字符集

执行下面的SQL看看当前字符集设置:

SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';

重点看这几个变量,必须是utf8mb4:

  • character_set_client(客户端发送数据的字符集)
  • character_set_connection(连接层的字符集)
  • character_set_results(返回给客户端的字符集)

如果这几个是utf8,可以先临时设置会话变量测试:

SET NAMES utf8mb4;

然后再插入Emoji试试,如果这次成功了,说明需要修改MySQL的配置文件(my.cnf或my.ini),永久生效:

[mysqld]
# MySQL 5.6要用character-set-server,不要用default-character-set
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

改完记得重启MySQL服务,再重新登录检查变量是否生效。

3. 确认驱动版本兼容性

MySQL 5.6对utf8mb4的支持没问题,但要确保你的数据库驱动版本足够新:

  • JDBC驱动至少要5.1.37及以上,旧版本可能不识别utf8mb4这个参数
  • PHP的mysqli或PDO也要确保版本支持utf8mb4连接

4. 验证插入结果

插入Emoji后,用这条SQL查看字段的十六进制值:

SELECT HEX(your_longtext_column) FROM your_table;

正常的Emoji(比如😀)十六进制应该是F09F9880(4字节),如果看到的是3F(问号的十六进制),说明还是有转码环节出问题了,回到前面的步骤排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:12:46