MySQL导入导出中文乱码字符集设置解决 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

常见坑

  1. 用 utf8 存 emoji 和生僻字直接乱码,必须 utf8mb4。
  2. 导出不指定 --default-character-set,编码在文件里就已错。
  3. 客户端连接字符集与表不一致,展示乱码但数据本身正确。
  4. ALTER 转换大表锁表,低峰执行。
  5. 排序规则 collation 选错,中文排序和比较异常。
  6. 已有乱码数据无法靠改字符集还原,只能重新导入。
  7. 不同版本默认字符集不同,迁移时统一为 utf8mb4。

总结

中文乱码先分清是数据错还是连接错:SHOW 字符集定位,导入导出都带 --default-character-set=utf8mb4,库表连接三层统一。新库一律建 utf8mb4,避免后期转换。已有乱码数据只能备份重新导入,改配置救不回来。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-14 07:18 
'); })();