上一篇
"小王,客户说后台看到的中文全是黑方块■,快查查怎么回事!" 凌晨2点接到这通电话时,我盯着满屏的█████欲哭无泪——昨天刚迁移的MySQL数据库,今天所有中文内容都变成了神秘黑方块...
如果你也遇到过这种"加密通信",别慌!跟着我三步排查,让汉字重见天日👇
症状对比表
| 现象 | 可能原因 |
|-------|---------|
| 全部显示为■ | 字符集完全不兼容 |
| 部分乱码如"䏿–‡" | 传输过程编码错误 |
| 问号"???" | 存储时字符被截断 |
立即验证(复制这段SQL):
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
关键看这三个值:
character_set_client
(客户端编码) character_set_connection
(连接层编码) character_set_results
(返回结果编码) 在MySQL客户端执行:
SET NAMES 'utf8mb4'; -- 万能解药
找到my.cnf
或my.ini
,添加:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
如果已有数据乱码,试试转码魔法:
UPDATE 表名 SET 字段名 = CONVERT(CONVERT(字段名 USING latin1) USING utf8mb4);
CREATE TABLE 用户表 ( id INT, name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8≠utf8mb4 😱
MySQL的"utf8"其实是阉割版(最大3字节),要存emoji表情必须用"utf8mb4"(4字节)
连接器也要设编码
比如JDBC连接串要加:
jdbc:mysql://地址:3306/数据库?useUnicode=true&characterEncoding=utf8
终端环境要同步
export LANG=zh_CN.UTF-8
chcp 65001
✅ 数据库服务端utf8mb4
✅ 客户端连接参数
✅ 操作系统环境变量
✅ 终端/IDE编码设置
✅ 历史数据转码
2025年最新实践:
utf8
,只用utf8mb4
utf8mb4_0900_ai_ci
(MySQL 8.0+) HEX()
函数查看原始编码 现在再执行SELECT * FROM 用户表
,是不是熟悉的汉字又回来啦?🎉 下次遇到乱码,记得先深呼吸,然后掏出这份秘籍~
本文由 东方施诗 于2025-08-03发表在【云服务器提供商】,文中图片由(东方施诗)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/529920.html
发表评论