navicat 15 不支持右键导出“仅选中行”,必须通过 where in 查询或临时表实现;导出时需设置单条 insert、导出 auto_increment 值及 utf8mb4 字符集。
在 navicat 15 中直接右键导出不支持“仅选中行生成 insert”
navicat 15 的「导出向导」默认只支持整表或按 sql 查询结果导出,右键数据网格 → “导出向导” 时无法限制为“当前选中的多行”。这是最常被误以为可行的操作,实际会导出整个结果集(哪怕你只点了三行)。
真正能控制范围的方式只有两种:用查询条件过滤,或用临时表/子查询封装选中逻辑。别指望右键菜单里藏着“导出选中行”按钮——它不存在。
用 WHERE IN 模拟“选中行”再导出 INSERT
如果你已知选中行的主键值(比如 id 是 101、205、337),最稳的办法是手动构造一条 SELECT 查询,让导出向导基于这个结果生成 INSERT:
- 新建查询,写类似:
SELECT * FROM `users` WHERE `id` IN (101, 205, 337);
- 执行后,在结果网格上右键 → 「导出向导」→ 选择「SQL 文件」→ 格式选「INSERT」→ 勾选「导出表结构」和「导出表数据」(后者必须勾)
- 注意:如果字段含
TEXT、BLOB或特殊字符,Navicat 默认会转义,但换行符可能被截断;建议导出前在「工具 → 选项 → 数据查看」里把「文本字段最大显示长度」调高(如 10000)
导出 INSERT 时容易忽略的三个关键设置
即使查询对了,导出的 SQL 也可能没法直接执行,问题往往出在导出配置上:
-
导出向导 → 第三步「导出设置」中,务必确认「插入语句格式」选的是「单条 INSERT + VALUES」而非「多值 INSERT」(后者兼容性差,MySQL 5.6 以下不支持) - 如果目标库有自增主键,且你想保留原 ID,要勾选「导出 AUTO_INCREMENT 值」;否则 Navicat 默认会在 INSERT 中省略该字段,导致新库自动生成 ID
- 字符集别依赖默认值:在「高级」选项卡里显式指定「导出字符集」为
utf8mb4,避免中文变问号——尤其当源库是utf8mb4而 Navicat 客户端编码是GBK时
没有主键或不想手输 ID?用临时表兜底
当选中行无法用简单条件描述(比如无主键、靠时间戳+状态组合筛选),又不想手动复制粘贴,可以走临时表路径:
- 先建临时表:
CREATE TEMPORARY TABLE tmp_export AS SELECT * FROM `orders` WHERE 0;
- 把选中数据 INSERT 进去(需提前在 Navicat 中复制好原始 SELECT 结果,粘贴成 VALUES 列表,或用 Excel 拼 SQL)
- 再对
tmp_export表跑导出向导——这时它就是你要的“精确子集”
这法子麻烦但可靠。真正难的不是操作步骤,而是意识到:Navicat 的“选中行”只是 UI 状态,不会自动映射到任何可复用的查询逻辑里。所有导出动作都得靠你把它翻译成 SQL 条件或中间结构。











