最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何解决Navicat导入SQL文件执行失败的问题
时间:2026-08-31 08:21:47 编辑:袖梨 来源:一聚教程网
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”)。
- 用
head -n 5 your_file.sql检查:第一行不该是、空行或^@ - Mac上别用TextEdit另存,它默认塞BOM;改用VS Code或BBEdit
- Navicat里勾选“使用UTF-8编码读取文件”无效——它不处理BOM,只影响解码方式
导入时报Error 1046:No database selected
Navicat不会自动帮你选库,哪怕SQL文件里写了USE db_name;,只要没在左侧导航树里手动点中目标数据库,就会报这个错。
操作路径很明确:连接 → 展开 → 找到你要导入的目标数据库 → 左键单击选中它(高亮显示) → 右键 → “运行SQL文件”。
- 如果SQL文件开头没有
USE语句,又没提前选库,所有CREATE TABLE都会失败 - 别在连接名上右键导入——那是在服务器级执行,没默认库上下文
- 导入后表没显示?右键数据库名或“表”节点 → “刷新”
大文件导入失败或卡死:别硬扛,换命令行
Navicat图形界面处理超过50MB的SQL文件容易超时、OOM或中断。与其调内存设置,不如直接切命令行。
先确保MySQL服务已启动,然后终端执行:
mysql -u root -p your_db_name < /path/to/your_file.sql
- 导入前务必删掉文件里的
SET @@GLOBAL.GTID_PURGED=...行(老版本MySQL不认识) - 如果报
Got a packet bigger than 'max_allowed_packet',去my.ini(Windows)或my.cnf(Linux/macOS)加:max_allowed_packet = 512M,重启MySQL - 文件含Windows换行符
rn?用dos2unix your_file.sql转LF再导入
导入后数据乱码或中文变问号
乱码根源不在Navicat界面编码设置,而在MySQL服务端字符集与SQL文件实际编码不匹配。
检查三处是否统一为utf8mb4:
- SQL文件本身编码(用VS Code确认是UTF-8无BOM)
- 目标数据库创建时指定:
CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - MySQL配置文件
[mysqld]段加:character-set-server = utf8mb4,并重启服务
Navicat连接属性里的“高级 → 字符集”设为utf8mb4只是客户端提示,不改变服务端行为。