Navicat不支持批量执行多个.sql文件,必须先用命令行合并为单个merged.sql,并配置取消“遇到错误时停止执行”、启用USE语句、调整分隔符及超时时间等关键设置。
navicat 本身不支持“批量选择多个 .sql 文件”并依次执行——它只认第一个文件,其余静默丢弃。真要合并导入,必须先手动或命令行合并成单个 merged.sql,再配对 navicat 的关键执行设置,否则大概率失败、中断、切错库或报字符集错误。
用命令行合并多个 .sql 文件(推荐跨平台方案)
手动复制粘贴易乱码、漏语句、错顺序;终端合并快且可控。关键是统一编码、保留顺序、剔除冗余 USE。
- Linux/macOS:
cat file1.sql file2.sql file3.sql > merged.sql(按你指定的顺序拼接) - Windows PowerShell:
Get-Content file1.sql, file2.sql, file3.sql | Set-Content merged.sql(比 cmdcopy /b更可靠,避免 ANSI 编码污染) - 所有文件必须是 UTF-8 编码(用 VS Code 或 Notepad++ 检查并转存),否则 Navicat 可能报
Unknown character set: 'utf8mb3' - 合并前删掉除第一个外的所有
USE database_name;,否则执行时会反复切换库,导致后续表找不到
合并后必须关掉 Navicat 的“遇到错误就停止”
默认勾选「遇到错误时停止执行」,意味着一条 INSERT 因主键冲突或字段超长失败,后面全部语句直接跳过——这和“合并导入”的预期完全相悖。
- 在「运行 SQL 文件」对话框中,取消勾选「遇到错误时停止执行」,改选「继续执行」
- 如果脚本含外键依赖,开头加
SET FOREIGN_KEY_CHECKS = 0;,结尾加SET FOREIGN_KEY_CHECKS = 1;,否则建表顺序错位会直接报错中断 - 若含存储过程,需同步修改「SQL 分隔符」为
$$(对应脚本里的DELIMITER $$),否则 Navicat 用分号截断,报语法错误
大文件(>50MB)必须调高超时和启用 USE 支持
Navicat 默认 60 秒超时,对大文件几乎必断;且默认忽略脚本内的 USE 语句,跨库操作全报 Table 'xxx' doesn't exist。
- 在「运行 SQL 文件」对话框中,勾选「执行每个语句前先执行 USE 语句」——这是跨库脚本能跑通的前提
- 把「SQL 执行超时时间」拉到 600(10 分钟)或更高,尤其当含大量
INSERT ... VALUES (...),(...),...批量写入时 - 超大文件(如 >200MB)建议放弃 Navicat,改用 MySQL 命令行:
mysql -u root -p database_name ,更稳更快,无界面超时限制
最容易被忽略的是编码一致性与 USE 语句去重——哪怕合并命令跑通、Navicat 显示“执行成功”,只要某个脚本是 Windows 记事本保存的 ANSI 编码,或中间混了两个 USE mydb;,最终结果就是部分表建在错库里、部分数据插不进、错误日志里还找不到明显报错。


















