必须启用SQL格式化并重启Navicat,否则所有配置无效;需导出XML统一规则、禁用“保留原有空格”、统一关键字大小写/缩进/换行参数,并配合sqlcheck等工具保障语义正确性。

必须先启用格式化开关并重启 Navicat,否则所有配置都是无效的。 这一步卡住 70% 的团队协作问题——Windows 和 macOS 默认都关闭该功能,且修改后不重启就不会加载新规则。
启用 SQL 格式化是跨平台生效的前提
Navicat 不会自动继承系统或账号设置,开关状态完全独立于操作系统。没打开它,Ctrl+Shift+F、右键菜单里的「美化 SQL」全都不响应。
- Windows:进入
工具 → 选项 → 编辑器 → SQL 格式化,勾选启用 SQL 格式化 - macOS:进入
Navicat → 偏好设置 → SQL 编辑器,勾选启用 SQL 格式化 - 勾选后必须彻底退出 Navicat(不是关窗口),再重新启动;已打开的查询标签页仍沿用旧规则
- 中文输入法下
Ctrl+Shift+F可能被拦截,建议临时切英文输入法或改用右键菜单验证
导出 XML 配置实现 Git 可控的规则同步
Navicat 没有云端同步机制,但支持标准 XML 导出/导入,这才是真正可版本管理、可审计、可 diff 的方案。
- 配置好本地参数后,在
美化 SQL 选项…对话框右下角点导出,保存为navicat_sql_format.xml - 把该文件提交到项目仓库,路径建议统一为
.navicat/format/navicat_sql_format.xml - 团队成员导入时:打开
美化 SQL 选项…→导入→ 选中该 XML → 重启 Navicat - Navicat 16 与 17 的 XML 结构存在微小差异,混用会导致导入失败,团队需统一主版本
关键参数必须对齐,否则格式效果不一致
即使用了同一份 XML,若对以下三项理解偏差,Git diff 里会频繁出现无意义变更(比如纯空格或大小写抖动)。
-
Uppercase keywords:决定SELECT/WHERE是否强制大写。团队约定关键字大写就必须统一勾选,否则每次格式化都会触发大小写变更 -
Indent width:设为4(不是 2 或 8)。缩进过浅(2)在多层子查询中难分辨层级,过深(8)易挤出编辑器可视区 -
Wrap after N characters:推荐80~100。设为0会导致长条件堆成单行,横向滚动成为常态 - 务必取消勾选
保留原有空格:否则粘贴他人代码后,手写缩进会干扰自动对齐逻辑,尤其影响JOIN ON条件对齐
格式化可能引发执行报错,这些语义改动容易被忽略
XML 配置只管外观,但 Navicat 的格式化引擎会在后台做实际文本重排,某些操作会悄悄改变 SQL 行为。
-
/*+ USE_INDEX(t1 idx_a) */类 hint 可能因自动删行尾空格而截断,导致优化器失效 -
UNION前后子查询字段类型不一致时,格式化重排可能暴露隐式转换错误(如INT和VARCHAR并列) - MySQL 模式下含空格的表名如
`order`,格式化有时会漏掉反引号,变成裸词order触发语法错误 - 格式化不校验
SELECT *、缺失索引、N+1 查询等语义问题,需配合sqlcheck等 CLI 工具补足
真正难的不是导出 XML,而是让所有人记得重启软件、禁用“保留原有空格”、并在 CI 中用 sqlcheck 拦截格式化掩盖不了的问题。格式是肉眼可见的,规范是需要工具链兜底的。


















