正向工程同步的是物理模型中定义的完整对象结构与约束,包括表结构、字段类型及长度、主键/外键、索引、CHECK约束、默认值、注释、视图和存储过程等,而非仅建表。正向工程到底在同步什么?别误以为只是“建表”正向工程不是一键生成数据库,而是把物理模型中定义的**完整对象结构与约束**,按目标数据库语法翻译并应用到真实环境。它同步的包括:表结构、字段类型及长度(如 varchar(255))、主键/外键定义、索引(含唯一索引)、check 约束、默认值、注释,甚至视图和存储过程(取决于模型内容和 navicat 版本支持)。如果你模型里某个外键没设级联动作(ON DELETE CASCADE),正向工程后数据库里也不会有——它不会“脑补”逻辑字段类型会自动映射:模型中选 INT,对 MySQL 就是 INT,对 PostgreSQL 就转成 INTEGER;但像 TINYINT 这种 MySQL 特有类型,在 PostgreSQL 模型里压根不会出现选项若目标数据库已存在同名表,默认行为是「跳过」而非覆盖——这点极易被忽略,导致你以为“同步失败”,其实是 Navicat 在保护数据同步前必须检查的三个关键配置项正向工程失败或结果异常,80% 出在模型与连接配置不匹配。重点核对以下三项:模型的目标数据库类型与版本:新建模型时选的是 MySQL 8.0,但你连的是 MySQL 5.7 实例?那 JSON 字段、隐藏索引等特性会直接报错或降级处理数据库连接的字符集与排序规则:模型里字段设了 utf8mb4_unicode_ci,但连接用的是 latin1_swedish_ci?建表时可能静默退化为 utf8mb4_general_ci,后续中文排序或 emoji 存储出问题当前连接用户权限:需要 CREATE、ALTER、INDEX、REFERENCES 权限;缺 REFERENCES 会导致外键创建失败,错误提示常是模糊的 ERROR 1215“同步模型到数据库”和“同步模型到文件”的本质区别这两个入口看似相似,底层行为完全不同,选错会耽误调试节奏:同步模型到数据库:直连执行 DDL,立即生效。适合开发环境快速验证结构,但不可逆——删表、改字段类型等操作会直接作用于库同步模型到文件:只生成标准 SQL 脚本(含 CREATE TABLE、ALTER TABLE ADD CONSTRAINT 等),不触碰数据库。这才是上线前必走流程:你可以用 git diff 对比脚本变更,加 --dry-run 在测试库跑一遍,甚至人工删掉危险语句(比如 DROP COLUMN)注意:Navicat 生成的 SQL 默认不含事务包装。如果脚本里有多个表变更,而中间某步失败,前面已执行的 DDL 不会自动回滚——得自己包一层 BEGIN; ... ; COMMIT; 或拆成原子脚本外键和索引为什么有时“没同步过去”?这不是 Bug,而是 Navicat 的显式设计逻辑:它只同步模型中**明确启用**的对象属性。常见漏点: 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐