phpmyadmin导出sql文件中文乱码的根本原因是连接字符集未设为utf8mb4,而非文件保存编码问题;必须执行set names utf8mb4并勾选导出页“utf-8编码”选项,同时确保数据库本身使用utf8mb4字符集。
导出sql文件时中文乱码?先看连接字符集是否为utf8mb4
phpmyadmin导出的sql文件内容编码,取决于当前数据库连接使用的字符集,不是你浏览器或编辑器看到的“保存编码”。如果导出后恢复时报incorrect string value或中文变问号/方块,大概率是连接层没设对。
操作前务必在phpMyAdmin SQL窗口执行:
SET NAMES utf8mb4;
再点「导出」——这会强制本次会话用utf8mb4收发数据。别只依赖页面顶部显示的“当前连接字符集”,有些版本UI不刷新,执行完SET NAMES才真正生效。
- 检查方式:执行
SHOW VARIABLES LIKE 'character_set%';,确认character_set_client、character_set_connection、character_set_results全为utf8mb4 - 如果数据库本身用的是
latin1或utf8(非utf8mb4),导出再编码也没用,得先改库/表/列的COLLATE - phpMyAdmin 5.2+ 默认连接字符集通常是
utf8mb4,但旧版或自定义配置可能仍是utf8,不可盲信
导出页必须勾选「UTF-8 编码」且格式选SQL
「UTF-8 编码」这个选项藏在「格式特定选项」里,但它控制的是SQL文件里字符串字面量的编码(比如INSERT INTO ... VALUES ('中文')里的'中文'怎么写),和连接字符集是两件事。漏勾就等于让phpMyAdmin用连接字符集原样写进文件,而连接字符集未必等于文件保存编码。
路径:导出页 → 「导出方法」选Custom → 展开「格式特定选项」→ 找到UTF-8 编码复选框并勾上。
- 仅对
SQL格式生效;选CSV for MS Excel或JSON时该选项灰掉,无效 - 勾了之后,生成的SQL文件头部会自动加
/*!40101 SET NAMES utf8mb4 */;,这是恢复时的保险 - 如果导出后用VS Code打开显示乱码,不是导出错了,而是编辑器默认用
GBK或ISO-8859-1解析——右下角手动切到UTF-8即可
CSV导出中文乱码?关键在「文件字符集」下拉菜单
CSV没有SQL那种元数据声明,所以phpMyAdmin导出CSV时,靠的是HTTP响应头+文件BOM来告诉浏览器/Excel用什么编码读。但很多用户只改了分隔符,忘了调字符集,结果看到䏿以为逗号丢了。
正确操作:导出页 → 「格式」选CSV(不是CSV for MS Excel)→ 拉到最下方「格式特定选项」→ 找到Character set of the file下拉框 → 选utf-8。
- 这个选项在「快速导出」模式下不可见,必须用
Custom导出 - 导出后若给Excel用,建议用记事本另存为
UTF-8 with BOM,否则Excel 2016以下版本可能当ANSI处理 - 字段值含换行符(
\n)时,即使设了Fields enclosed by ",旧版phpMyAdmin(如4.9)可能跳过封装,导致CSV错行——实测比理论更可靠
大库别硬扛,命令行mysqldump才是稳解
phpMyAdmin导出超过50MB的库,容易超时、内存溢出、中断,且无法断点续传。这时候界面操作只是徒增焦虑。
终端一行命令搞定,且天然支持utf8mb4:
mysqldump -u username -p --default-character-set=utf8mb4 database_name > backup.sql
-
--default-character-set=utf8mb4确保客户端连接和输出文件都用utf8mb4,比phpMyAdmin的UI勾选更底层、更可靠 - 加
--skip-triggers或--no-create-info可跳过触发器或建表语句,适合只导数据 - 导出后用
file backup.sql确认文件开头是/* MySQL dump */且含SET NAMES utf8mb4,而不是SET NAMES utf8
真正麻烦的不是选哪个选项,而是搞清「连接层」「文件层」「应用层」三层编码各自管什么。导出时少一次SET NAMES,恢复时就得重跑一遍。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











