Windows (GBK) 与 Linux (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;
# 导出指定表
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
--default-character-set 必须同时用于导出与导入--set-charset 在文件头写入 SET NAMES--hex-blob 以十六进制导出二进制列,防乱码CREATE DATABASE ... CHARSET=xxx 与导出字符集一致--default-character-setSHOW VARIABLES LIKE 'char%'; 确认两端 character_set_database 一致file backup.sql 验证iconv -f gbk -t utf8 gbk.sql > utf8.sql 转码后再导最佳实践:新建项目统一使用
utf8mb4,表名/列名仅用 ASCII,彻底规避字符集迁移坑。