必须关闭比对设置中的“Compare AUTO_INCREMENT value”和同步高级选项中的“Include AUTO_INCREMENT value”,否则即使忽略也会标红或错误覆盖自增值。
结构比对中标红 auto_increment 值差异,不是 bug,而是 navicat 默认行为;必须关闭比对阶段的「比较 auto_increment 值」开关,仅靠同步选项里的“忽略”无效。
比对阶段和同步阶段是两套独立逻辑
很多人勾选了同步设置里的 Ignore AUTO_INCREMENT,但比对视图依然标红——因为这个选项只影响同步时是否生成 ALTER TABLE ... AUTO_INCREMENT = N 语句,完全不参与比对判断。比对本身读取的是 information_schema.TABLES.AUTO_INCREMENT 字段,只要两个库该值不同(比如 1001 vs 2005),就会视为结构差异。
- 比对窗口右上角齿轮图标 → 打开「比较设置」
- 取消勾选
Compare AUTO_INCREMENT value(Navicat Premium 16+ 可能在「高级」标签页,名称为Ignore AUTO_INCREMENT value when comparing table structures) - 必须点击「重新对比」,否则界面缓存旧结果,看起来还是红的
同步前还得再关一次「Include AUTO_INCREMENT value」
即使比对已过滤,一旦你点「同步」,Navicat 会重新扫描变更项并生成 SQL。这时若没关同步阶段的开关,仍可能写出 AUTO_INCREMENT = 892 这类硬编码语句,导致目标表自增值被错误覆盖。
- 进入结构同步向导 → 到「选项」页签 → 点右下角「高级」按钮
- 找到
Include AUTO_INCREMENT value(旧版可能叫Sync auto increment value),确保未勾选 - 这个设置不保存为全局偏好,每次新建同步任务都得手动确认
验证是否真生效:别信界面预览,要查生成的 SQL
Navicat 的「同步预览」常不显示 AUTO_INCREMENT 相关变更,看着干净,实际执行却写入。最可靠的方式是导出 SQL 再检查。
- 同步前勾选
Generate SQL only (do not execute) - 导出后搜索
AUTO_INCREMENT=—— 如果出现类似AUTO_INCREMENT=892,说明高级选项没关对 - 正常情况是字段定义含
id INT NOT NULL AUTO_INCREMENT,但末尾绝不能带等号赋值
真正麻烦的不是操作步骤,而是这两个开关默认全开、且藏在不同路径里:一个在比对设置里,一个在同步高级选项里。漏关任何一个,都可能导致主键冲突或跳号,而错误信息里从不提 AUTO_INCREMENT 这个词。


















