“Line too long”错误源于MySQL服务端max_allowed_packet限制,非Navicat设置所致;当SQL文件中存在超长单条INSERT(如含大JSON/BLOB或合并多行),且max_allowed_packet值过小(默认4MB)时触发。
navicat 本身没有“行长度限制”设置,“line too long”不是 navicat 报的错,而是 mysql 服务端拒绝执行超长语句时返回的错误(error 1153 (08s01): got a packet bigger than 'max_allowed_packet' bytes)。
为什么还原时突然报“Line too long”
这个提示常见于以下场景:
- SQL 文件里有一条超长的
INSERT INTO ... VALUES (...),比如单条插入几万列或含大 JSON/BLOB 字段 - Navicat 用「查询」方式(非「运行 SQL 文件」)双击打开并执行 SQL 文件,此时整条语句被当作单个查询提交给 MySQL
- 目标 MySQL 的
max_allowed_packet值太小(默认通常为 4MB),而语句实际长度远超该值 - 注意:该错误和文件编码、BOM、换行符无关,也和 Navicat 编辑器显示宽度完全无关
怎么确认是 max_allowed_packet 导致的
在 Navicat 中连接目标数据库,执行:
SELECT @@max_allowed_packet;
如果返回值 ≤ 4194304(即 4MB),且你导入的 SQL 文件中存在单条超长语句(如导出时用了“每批记录数=0”或“合并为单条 INSERT”),基本就是它。
再查当前会话是否生效:
SHOW VARIABLES LIKE 'max_allowed_packet';
临时解决:改服务端配置 + 换执行方式
别在 Navicat 里调编辑器设置——没用。正确做法是:
- 登录 MySQL 服务器,临时加大限制:
SET GLOBAL max_allowed_packet = 268435456;(即 256MB) - 确保 Navicat 使用「运行 SQL 文件」功能(右键连接 →「运行 SQL 文件」),而不是双击打开后点执行
- 勾选「使用当前连接的字符集」和「继续执行即使遇到错误」(避免一条失败就中断)
- 若仍失败,说明 SQL 文件里真有单条 >256MB 的语句——这时必须拆分,不能靠调参硬扛
长期预防:导出时就避开超长行
下次用 Navicat 导出 SQL 时,在「高级」选项里做两件事:
- 取消勾选「将多行 INSERT 合并为单条语句」(有些版本叫「优化 INSERT 语句」)
- 把「每批记录数」设为 10000~50000(别设 0 或空),让每条
INSERT控制在合理长度 - 对含大字段的表,单独导出结构 + 数据,避免和小表混在一个文件里
真正卡住的从来不是屏幕显示,而是 MySQL 网络包大小和服务端解析缓冲区——盯着 Navicat 编辑器调字体或换行,只会浪费时间。











