正确导出需选“自定义”方法,勾选“结构”和“数据”,数据格式选insert,字符集设utf8mb4,启用禁用外键检查及set sql_mode语句,use语句改为变量形式并清理注释。
导出结构+默认数据:选对导出选项比写脚本更关键
phpmyadmin 默认导出的是空表结构,insert 语句不会自动生成——除非你主动勾选「数据」并确认「导出时包含 insert 语句」。开发环境初始化脚本依赖的其实是「带 insert 的建表语句」,不是「结构 + 单独的数据文件」。
常见错误现象:
• 导出后执行 SQL 报错 Table 'xxx' doesn't exist(只导了数据没导结构)
• 表建好了但没数据(漏选「数据」或误选「仅结构」)
• 数据里含中文变问号(导出时字符集没设成 utf8mb4)
- 进入 phpMyAdmin → 选中目标数据库 → 点「导出」页签
- 「导出方法」选
自定义(别用「快速」) - 「格式」保持
SQL,下方「格式特定选项」展开后:
✓ 勾选「结构」
✓ 勾选「数据」
✓ 「数据」下拉选INSERT(不是REPLACE或UPDATE) - 「导出选项」区域:
✓ 字符集选utf8mb4
✓ 勾选「添加DROP TABLE/VIEW/PROCEDURE/FUNCTION/EVENT语句」(方便重跑)
避免外键和自增 ID 冲突:导出前必须禁用外键检查
如果表之间有外键约束,直接导入可能因插入顺序错乱报错 Cannot add or update a child row: a foreign key constraint fails;自增字段若已有数据,还可能因 AUTO_INCREMENT 值偏小导致后续插入失败。
解决办法不是改 SQL 文件,而是在导出时让 phpMyAdmin 自动处理:
- 在「导出」页签最下方「导出选项」区域,找到
外键检查选项 - 务必勾选「禁用外键检查」(它会自动在 SQL 开头加
SET FOREIGN_KEY_CHECKS=0;,结尾加SET FOREIGN_KEY_CHECKS=1;) - 同时勾选「添加
SET SQL_MODE语句」(兼容 MySQL 5.7+ 和 8.0 的严格模式) - 不建议手动删
INSERT里的id字段值——保留原值更利于本地环境一致性
生成的 SQL 如何适配开发环境初始化脚本
导出的 SQL 是「全量可执行」的,但直接扔进 CI/CD 或 Docker 初始化目录常出问题:路径硬编码、数据库名写死、权限不足。
实操建议:
- 导出后打开 SQL 文件,把开头的
USE `xxx`;改成变量形式,例如:USE ${DB_NAME};(供 shell 脚本注入) - 删除文件末尾可能存在的
-- phpMyAdmin SQL Dump...注释块(某些容器内 mysql 客户端不认长注释) - 若需跳过部分表(如日志表、缓存表),不要靠 phpMyAdmin 过滤——导出全量后用
sed或awk删段落更可控 - 测试导入命令别用
source,用:mysql -u root -p${PASS} -h db ,避免交互式中断
MySQL 8.0+ 用户注意:sql_mode 和认证插件影响导入成功率
phpMyAdmin 导出的 SQL 在 MySQL 8.0+ 上可能卡在 Field 'password_last_changed' doesn't have a default value 这类报错——不是 SQL 本身有问题,而是服务端 sql_mode 或用户认证方式不匹配。
这不是导出环节能解决的,但你得知道怎么绕开:
- 导出时「导出选项」里勾选「添加
SET SQL_MODE语句」只是起点,真正起作用的是目标库的全局sql_mode - 初始化脚本执行前,先运行:
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO'; - 如果用
mysql_native_password插件登录,确保导入命令也指定:--default-auth=mysql_native_password - phpMyAdmin 5.2+ 默认导出不含
DEFINER子句,但老版本导出的视图/存储过程仍可能带,遇到Access denied; you need (at least one of) the SUPER privilege(s)就得手动删掉DEFINER=`xxx`@`%`
真正麻烦的从来不是导出动作本身,而是导出内容和目标环境 sql_mode、字符集、用户权限这三者的隐式耦合。每次换环境,先 SELECT @@sql_mode, @@character_set_database; 对一眼,比重导十次都管用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











