Navicat SQL格式化需手动启用并重启生效,仅在SQL编辑器中响应快捷键,且依赖正确参数配置与语法规范。
navicat 的 sql 格式化功能默认是关闭的,不启用就永远没反应——哪怕你 ctrl+shift+f 按烂了也没用。
这是 90% 无效操作的根源。Navicat 不像编辑器装插件即生效,它必须手动“认领”这个能力,且修改后需重启才加载新配置。
启用 SQL 格式化
Enable SQL formatting
Ctrl+Shift+F(Windows)或 Cmd+Shift+F(macOS)只在「SQL 编辑器」中有效,不是所有带文本框的地方都能触发。
Cmd+Shift+F 可能被系统或 Chrome 等应用抢占,右键编辑区 → Format SQL 更可靠Navicat 的格式化引擎不理解业务逻辑,它只按规则硬排。效果丑,大概率是参数和你的习惯不匹配,而不是 bug。
Indent width:设为 4(别用 8),嵌套 JOIN 或子查询时缩进过宽会导致代码滑出屏幕Wrap after N characters:设为 80~100,防止长 WHERE 条件挤成超长单行Uppercase keywords:建议关掉。小写关键字(select、where)在 Git diff 和团队协作中更易区分变量名,且 Navicat 对大小写混合 SQL 解析更稳Put each clause on new line 和 Align multiple conditions 要配合开启,否则 AND/OR 会缩进错位,看起来像语法错误它不是纯文本替换,而是尝试解析语法树。一旦改得越界,就会悄悄破坏语义。
/*+ USE_INDEX(t1 idx_a) */ 这类 hint 错位或截断` 处理不稳定:MySQL 下含空格的表名如 `order`,格式化后可能漏掉反引号,变成 order 导致语法错误INT 和 VARCHAR 并列)${} 或 <if> 标签、未闭合引号、方言特有语法(如 PG 的 RETURNING),格式化器直接卡死,弹出 Error formatting SQL: Syntax error near ...
真正容易被忽略的是:格式化 ≠ 语法校验。它不会告诉你括号是否匹配、表是否存在、字段拼写是否正确——这些还得靠你肉眼或执行前预检查。