Navicat结构同步的Options直接影响DDL安全性与可执行性Compare auto-increment value应取消以防主键重置Drop objects not exist in source为高危项需确认源库结构冻结Compare comments和Compare collation跨版本/引擎时易致报错Compare foreign keys勾选后需手动调整ALTER顺序以避免外键约束失败。结构同步时“选项”里哪些配置真会影响SQL生成navicat结构同步的options不是摆设几个关键开关直接决定生成的ddl是否安全、是否可执行。默认全开看似省事但容易触发不可逆操作比如删表、删字段或语法报错尤其跨版本/跨引擎时。Compare auto-increment value默认勾选但多数场景应取消——自增ID是运行时状态不是结构定义同步它会导致目标库主键重置引发后续插入冲突Drop objects not exist in source高危项勾选允许删表/删列/删索引上线前务必确认源库结构已冻结否则可能误删生产字段Compare commentsMySQL/PostgreSQL支持字段注释但Oracle旧版不支持COMMENT ON COLUMN语法若目标库版本低勾选此项会导致部署失败Compare collation字符集校对规则不一致时会触发ALTER语句若目标库字符集为utf8mb4_general_ci而源库是utf8mb4_0900_as_cs强行同步可能因排序规则不兼容报错怎么让Navicat跳过特定对象如日志表、临时表结构同步默认比对所有对象但开发库常含_tmp、log_、backup_类表这些不该上生产。Navicat不支持正则过滤得靠手动排除。在“结构比对”界面左上角的Source Objects树形列表中逐个展开表节点取消勾选不需要同步的表右键也可批量取消视图/存储过程同理若目标库已有同名函数但逻辑不同不要依赖“覆盖”先手动导出原定义备份再勾选同步注意取消勾选后该对象的**所有变更**包括新增字段、改类型都不会出现在部署脚本里——不是“跳过变更”而是“彻底忽略这个对象”为什么部署脚本里出现ALTER TABLE … MODIFY COLUMN却执行失败这是MySQL常见报错ERROR 1845 (HY000): Cannot change column x to type y: used in a foreign key constraint。Navicat生成DDL时未主动检查外键依赖链只按对象维度生成语句。根源在Options → Compare foreign keys若勾选Navicat会同步外键定义但不会自动调整ALTER顺序若没勾选则外键差异被忽略导致脚本缺失ADD CONSTRAINT后续数据插入失败实操建议先勾选此项生成完整脚本 → 复制到SQL编辑器 → 手动拆分先把DROP FOREIGN KEY和ADD FOREIGN KEY拎出来放在对应MODIFY COLUMN前后更稳妥做法在目标库提前执行SET FOREIGN_KEY_CHECKS 0;仅限维护窗口期同步完再设回1跨数据库类型同步如MySQL→PostgreSQL能用结构同步吗不能。Navicat结构同步严格限定同类型数据库MySQL?MySQL、PostgreSQL?PostgreSQL跨类型时连连接选项都不可选。 橙篇 百度文库发布的一款综合性AI创作工具