Navicat自定义代码片段(Snippets)导出路径不在连接导出范围内,而是单独存于系统特定目录:macOS为~/Library/Application Support/PremiumSoft CyberTech/Navicat Premium/Snippets/,Windows为%APPDATA%\PremiumSoft CyberTech\Navicat Premium\Snippets\,Linux为~/.navicat_premium/Snippets/,文件为纯JSON格式,可直接复制迁移。

Navicat自定义代码片段(Snippets)导出路径在哪?
Navicat 的代码片段(即你写 SQL 时按 Ctrl+Space 弹出的快捷模板)不随 .ncx 连接文件导出,也不在「文件 → 导出连接」流程中。它们单独存于 Profiles/Snippets 子目录下,路径因系统而异:
- macOS:
~/Library/Application Support/PremiumSoft CyberTech/Navicat Premium/Snippets/ - Windows:
%APPDATA%\PremiumSoft CyberTech\Navicat Premium\Snippets\ - Linux:
~/.navicat_premium/Snippets/
这些是纯 JSON 文件(如 select_all.json),可直接复制粘贴,无需解密或密码。但注意:若片段里硬编码了路径、数据库名或 OS 特定语法(如 LOAD DATA INFILE '/tmp/xxx.csv'),迁到另一系统可能执行失败。
SQL生成模板(Templates)必须手动迁移
Navicat 的「导出向导 → 高级 → 模板」或「数据同步 → 自定义 SQL 模板」功能所用的模板文件,不在任何内置导出范围。它们位于:
- macOS:
~/Library/Application Support/PremiumSoft CyberTech/Navicat Premium/Modeler/Templates/ - Windows:
%APPDATA%\PremiumSoft CyberTech\Navicat Premium\Modeler\Templates\ - Linux:
~/.navicat_premium/Modeler/Templates/
这些是 XML 或文本格式,内容含字段映射逻辑和 SQL 生成规则。迁移时要检查:
- 模板中是否引用了本地绝对路径(比如日志输出路径)
- 是否依赖特定数据库方言函数(如 MySQL 的
GROUP_CONCAT()在 PostgreSQL 中需改写为STRING_AGG()) - 字符编码是否一致(尤其含中文注释的模板,避免 Windows 上用 GBK 编辑后在 macOS 上显示乱码)
为什么“导出连接”不包含 Snippets 和 Templates?
因为 Navicat 将这三类配置视为不同层级:
-
.ncx文件只管「连到哪、怎么连」——连接元数据 -
Snippets属于「个人效率层」,绑定用户习惯,不随项目流转 -
Templates属于「工程适配层」,常与具体业务模型强耦合,Navicat 默认不打包以防误传播
这也意味着:团队协作中若共用一套模板,不能靠导出连接同步,得走 Git 管理 Templates/ 目录,并在新机器上手动替换;Snippets 同理,建议用脚本定期备份到 Dropbox 或 NAS。
跨平台迁移后模板失效的典型现象
迁移后打开导出向导 → 点「高级」→ 「模板」下拉为空,或选中后点击「编辑」报错 Failed to load template file,常见原因有:
- 目标系统中
Templates/目录权限不足(尤其是 macOS 上从 Time Machine 恢复后继承了错误 ACL) - 模板文件名含空格或 Unicode 字符(如
MySQL→PostgreSQL 转换模板.xml),Windows 下部分版本解析失败 - Navicat 版本主号不一致(v16 模板在 v17 中字段定义变更,XML 校验失败静默跳过)
最稳妥的做法:迁移前先在源机用文本编辑器打开一个模板,确认根节点是 <template version="2"></template>(v16+)还是 <template version="1"></template>(v15 及更早),目标机装同主版本 Navicat 再覆盖。


















