MySQL导入导出中文乱码字符集设置解决
时间:2026-11-14 07:18 作者:emer 分类: MySQL
前言
导入 SQL 或导出数据后中文变成问号或乱码,多半是字符集不一致:库表是 utf8,连接层用了 latin1,或者导出时没指定字符集。MySQL 的 utf8 是残缺的, emoji 和生僻字要用 utf8mb4。本文讲解查看字符集、导入导出指定字符集、库表与连接统一设置的完整方法。
操作步骤
1. 查看库表字符集
SHOW VARIABLES LIKE 'character_set_%';
SHOW CREATE TABLE users;
2. 导出时指定 utf8mb4
mysqldump -uroot -p --default-character-set=utf8mb4 dbname > db.sql
3. 导入时指定字符集
mysql -uroot -p --default-character-set=utf8mb4 dbname < db.sql
4. 临时设置连接字符集
SET NAMES utf8mb4;
5. 修改表字符集
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
6. 修改库默认字符集
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
7. 永久写入 my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
常见坑
- 用 utf8 存 emoji 和生僻字直接乱码,必须 utf8mb4。
- 导出不指定 --default-character-set,编码在文件里就已错。
- 客户端连接字符集与表不一致,展示乱码但数据本身正确。
- ALTER 转换大表锁表,低峰执行。
- 排序规则 collation 选错,中文排序和比较异常。
- 已有乱码数据无法靠改字符集还原,只能重新导入。
- 不同版本默认字符集不同,迁移时统一为 utf8mb4。
总结
中文乱码先分清是数据错还是连接错:SHOW 字符集定位,导入导出都带 --default-character-set=utf8mb4,库表连接三层统一。新库一律建 utf8mb4,避免后期转换。已有乱码数据只能备份重新导入,改配置救不回来。
遇到问题加QQ23979811 协助处理