需在Custom模式下勾选Extended INSERTs并设置Maximal length of created query(如50000字节),才能控制每条INSERT语句的记录数;Quick模式下该选项不可见且Extended INSERTs默认关闭。
导出时控制每条 INSERT 语句的记录数,关键在「Custom」导出模式下的 Maximal length of created query 和 Extended INSERTs
phpmyadmin 并不提供直接设置“每条 insert 插入 n 条记录”的滑块或输入框,而是通过两个联动参数间接控制:启用 extended inserts 后,实际每条语句包含多少行,取决于 maximal length of created query(默认 1000000 字节)和单条记录生成的 sql 长度。你调小这个字节数,就会迫使 phpmyadmin 把长 insert 拆成多条短语句。
-
Extended INSERTs必须勾选——否则每条记录都生成独立INSERT INTO ... VALUES (...),根本不会合并 -
Maximal length of created query是硬性截断阈值:当累积的 VALUES 列表即将超出该字节数时,phpMyAdmin 就结束当前 INSERT,另起一条 - 实际每条语句的记录数不固定:字段越长、内容含中文或二进制数据越多,单条记录占的字节数越大,能塞进去的行数就越少
- 若想稳定控制在约 100 行/INSERT,可先试设为
20000(经验值,适合多数文本字段表),导出后用文本编辑器查几条 INSERT 的VALUES段落验证
为什么改了 Maximal length of created query 却没生效?
常见原因是没在正确的导出路径下修改——这个选项只在「Custom」导出模式中可见。如果选的是 Quick 模式,所有高级参数都被隐藏,Extended INSERTs 默认关闭且不可调。
- 导出前务必点击
Custom标签页(不是默认的Quick) - 向下滚动到
Format-specific options区域,找到Extended INSERTs并勾选 - 在同一区域找
Maximal length of created query输入框,填入目标字节数(如50000) - 如果仍无效,检查是否启用了
Disable extended inserts(某些旧版 phpMyAdmin 在「SQL」标签页有此开关,需取消勾选)
Extended INSERTs 关闭时的典型错误表现
导出文件里每行都是独立的 INSERT INTO `table` VALUES (...);,哪怕只有 10 行数据也生成 10 条语句——这不仅体积大,导入时也更慢,还容易触发 MySQL 的 max_allowed_packet 限制(因为总请求数翻倍)。
- 这种格式下,
Maximal length of created query完全不起作用 - 如果你需要兼容极老版本 MySQL(Extended INSERTs;现代环境应始终开启
- 部分用户误以为“导出慢”是 phpMyAdmin 问题,其实是因关闭扩展插入后,PHP 脚本逐条拼接 SQL 导致内存占用飙升
导出后快速验证每条 INSERT 的记录数
不用数括号——用命令行或编辑器正则匹配更可靠。例如 Linux/macOS 终端执行:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
grep -o "VALUES (.*?);" dump.sql | head -n 5 | sed 's/VALUES //g' | sed 's/;//g' | sed 's/(//g' | sed 's/)//g' | tr ',' '\n' | wc -l
但更简单的是打开导出文件,搜索 VALUES (,观察前几处 VALUES 后面有多少组括号 (...)(注意转义和换行)。你会发现:同一行内的括号组数 = 当前 INSERT 的记录数,而这个数随你的 Maximal length 设置浮动。
真正难控的是字段内容长度——比如某条记录含一个 200KB 的 base64 图片字段,那它自己就会占满整个查询长度上限,导致每条 INSERT 只能塞 1 行。这种场景下,与其调参数,不如先导出为 CSV 或使用 mysqldump --skip-extended-insert 更可控。