如何解决Navicat导入SQL文件执行失败的问题

作者:袖梨 2026-08-31

Navicat报Unknown Command错误是因文件头含UTF-8 BOM(EF BB BF)等不可见字节被误解析为命令,需用VS Code或Notepad++转为UTF-8无BOM编码,并用head -n 5验证首行是否为正常SQL语句。

Navicat报Unknown Command错误:先看文件开头16字节

这不是SQL语法错,而是Navicat把文件头的不可见字节当成了命令。最常见的是UTF-8 BOM(EF BB BF),在VS Code右下角显示为“UTF-8 with BOM”时就危险了。

必须转成“UTF-8 无BOM”格式——Notepad++选「编码 → 转为UTF-8无BOM格式」;VS Code点编码后选“Save with Encoding → UTF-8”(注意不是“UTF-8 with BOM”)。

  1. head -n 5 your_file.sql检查:第一行不该是、空行或^@
  2. Mac上别用TextEdit另存,它默认塞BOM;改用VS Code或BBEdit
  3. Navicat里勾选“使用UTF-8编码读取文件”无效——它不处理BOM,只影响解码方式

导入时报Error 1046:No database selected

Navicat不会自动帮你选库,哪怕SQL文件里写了USE db_name;,只要没在左侧导航树里手动点中目标数据库,就会报这个错。

操作路径很明确:连接 → 展开 → 找到你要导入的目标数据库 → 左键单击选中它(高亮显示) → 右键 → “运行SQL文件”。

  1. 如果SQL文件开头没有USE语句,又没提前选库,所有CREATE TABLE都会失败
  2. 别在连接名上右键导入——那是在服务器级执行,没默认库上下文
  3. 导入后表没显示?右键数据库名或“表”节点 → “刷新”

大文件导入失败或卡死:别硬扛,换命令行

Navicat图形界面处理超过50MB的SQL文件容易超时、OOM或中断。与其调内存设置,不如直接切命令行。

先确保MySQL服务已启动,然后终端执行:

mysql -u root -p your_db_name < /path/to/your_file.sql
  1. 导入前务必删掉文件里的SET @@GLOBAL.GTID_PURGED=...行(老版本MySQL不认识)
  2. 如果报Got a packet bigger than 'max_allowed_packet',去my.ini(Windows)或my.cnf(Linux/macOS)加:max_allowed_packet = 512M,重启MySQL
  3. 文件含Windows换行符rn?用dos2unix your_file.sql转LF再导入

导入后数据乱码或中文变问号

乱码根源不在Navicat界面编码设置,而在MySQL服务端字符集与SQL文件实际编码不匹配。

检查三处是否统一为utf8mb4

  1. SQL文件本身编码(用VS Code确认是UTF-8无BOM)
  2. 目标数据库创建时指定:CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  3. MySQL配置文件[mysqld]段加:character-set-server = utf8mb4,并重启服务

Navicat连接属性里的“高级 → 字符集”设为utf8mb4只是客户端提示,不改变服务端行为。

相关文章

精彩推荐