首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 中文表名导入导出乱码终极解决方案

     編輯:MySQL 資料庫相關知識

跨字符集环境下 MySQL 中文表名迁移实战

Windows (GBK) 与 Linux (UTF-8) 混合环境迁移中文表名,核心原则是导出导入字符集显式指定并保持一致。

方案一:UTF-8 全链路(推荐新环境)

# 1. 导出
mysqldump -uroot -p --default-character-set=utf8 --set-charset=utf8 --hex-blob --databases dbname > utf8.sql

# 2. 编辑 sql 删除 CREATE DATABASE 行

# 3. 目标库登录指定字符集
mysql -uroot -p --default-character-set=utf8 -A

# 4. 重建库并导入
DROP DATABASE IF EXISTS dbname;
CREATE DATABASE dbname CHARSET=utf8;
USE dbname;
SOURCE utf8.sql;

方案二:GBK 显式指定(兼容老系统/中文表名)

# 导出指定表
mysqldump -uroot -p --default-character-set=gbk --set-charset=gbk --hex-blob dbname table1 table2 > gbk.sql

# 导入
mysql -uroot -p --default-character-set=gbk -A <<EOF
USE dbname;
SOURCE gbk.sql
EOF

关键要点

  1. --default-character-set 必须同时用于导出与导入
  2. --set-charset 在文件头写入 SET NAMES
  3. --hex-blob 以十六进制导出二进制列,防乱码
  4. 目标库 CREATE DATABASE ... CHARSET=xxx 与导出字符集一致
  5. 登录客户端同样加 --default-character-set

排查清单

  • SHOW VARIABLES LIKE 'char%'; 确认两端 character_set_database 一致
  • 文件编码用 file backup.sql 验证
  • 若仍乱码,尝试 iconv -f gbk -t utf8 gbk.sql > utf8.sql 转码后再导

最佳实践:新建项目统一使用 utf8mb4,表名/列名仅用 ASCII,彻底规避字符集迁移坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved