MySQL乱码本质是客户端、连接层、表结构字符集不一致,需统一为utf8mb4并正确配置各层编码。
MySQL字符集错误导致的乱码,本质是客户端、连接层、表结构三者字符集不一致。最常见的是插入时用UTF8mb4,但建表用latin1,或连接未声明编码,结果存进去就是问号或 Mojibake(如“æäº›æå”)。
登录MySQL后执行以下命令,重点关注client、connection、database、results、server、system这7个变量:
utf8mb4 支持完整Unicode(含emoji、生僻汉字),是MySQL 5.5.3+官方推荐的UTF8实现。不要用已废弃的utf8(实际是utf8mb3)。
character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
即使服务端设好了,客户端连接没声明,照样乱码。不同场景处理方式不同:
如果数据已存为乱码(比如原应是中文,却显示为“æ—类二进制垃圾),不能简单ALTER CONVERT。需按“错误编码 → 正确编码”双重转换还原:
,再以正确字符集重新解读ALTER TABLE t MODIFY COLUMN c VARBINARY(100); ALTER TABLE t MODIFY COLUMN c VARCHAR(100) CHARACTER SET utf8mb4;
操作前务必备份!这种修复依赖原始错误路径,误判会导致数据永久损坏。