Navicat Premium 是唯一支持存储过程版本控制的版本,需手动初始化本地 Git 仓库并配置路径,导出 SQL 后手动提交;MySQL 导出默认缺 DELIMITER,Oracle 支持更弱且不自动跟踪。
Navicat Premium 是唯一支持存储过程版本控制的 Navicat 版本,免费版和标准版不提供该功能。如果你团队用的是非 Premium 版本,直接启用“版本控制”菜单项是灰色不可用的——这不是权限或配置问题,而是功能缺失。
确认 Navicat Premium 并启用本地 Git 仓库
在 navicat premium 中管理存储过程版本,本质是把数据库对象导出为 sql 文件,再交由 git 管理。它不连接远程 git 服务,只支持本地文件系统路径作为仓库根目录:
- 必须先在操作系统中初始化一个空的 Git 仓库(例如
git init /path/to/navicat-objects),不能让 Navicat 代劳 - Navicat 的“版本控制 → 启用版本控制”只接受已存在且干净(无未提交变更)的本地 Git 仓库路径
- 选择的路径必须对当前用户有读写权限;若指向网络盘或 OneDrive 同步目录,Git 状态可能异常,导致“提交失败”但无明确报错
- 启用后,Navicat 会自动为每个被纳入版本控制的对象(如存储过程)生成一个独立的
.sql文件,命名规则为schema_name.procedure_name.sql
存储过程导出与 Git 提交的实际流程
Navicat 不会自动监听数据库变更并同步到 Git。你必须手动触发导出和提交,否则代码和数据库实际定义会脱节:
- 右键点击某个存储过程 → “导出” → 勾选“导出为 SQL 文件”,目标路径必须是你之前配置的 Git 仓库内(如
/path/to/navicat-objects/procs/) - 导出后,需回到 Navicat 主界面 → “版本控制 → 提交” → 手动填写 commit message,否则变更不会进入 Git 历史
- 每次修改存储过程前,建议先“拉取”最新版本(
版本控制 → 拉取),避免覆盖他人改动;但 Navicat 不做 SQL 文件内容合并,冲突需人工解决 - 注意:Navicat 导出的 SQL 默认不含
DELIMITER,MySQL 存储过程若含分号语句,直接执行会报错;需手动补上或用 Navicat 的“导出为可执行脚本”选项
Oracle 存储过程版本控制的特殊限制
Navicat 对 Oracle 的支持比 MySQL 更弱,尤其在版本控制环节:
- Oracle 存储过程在 Navicat 对象树中归类于“函数”节点,但“版本控制”功能仅识别“表”“视图”“存储过程(MySQL)”三类对象,Oracle 的
PROCEDURE和FUNCTION默认不被纳入自动跟踪范围 - 若强行将 Oracle 存储过程导出为 SQL 并放入 Git 仓库,Navicat 不会为其生成版本差异预览,也无法从 Git 回滚到数据库;只能靠人工比对
.sql文件与DBA_SOURCE查询结果 - Oracle 的
CREATE OR REPLACE PROCEDURE语句中若含中文注释或特殊字符,Navicat 导出时可能因客户端字符集设置(如未设为 AL32UTF8)导致乱码,进而使 Git diff 失效











