“同步到数据库”功能仅单向覆盖目标库结构,模型删字段即执行drop column,加not null须配默认值,入口为工具→同步到数据库…,需已保存.mwb文件并建立有create/alter权限的有效连接。
不能直接“同步”,必须走「正向工程生成 sql」或「同步到数据库」两条路径,且后者是单向覆盖、不保留数据——你模型里删一列,目标库就真 drop column;你没设默认值却加 not null,执行直接失败。
为什么“同步到数据库”按钮点了没反应
这个功能入口不在模型编辑界面右键菜单,也不在顶部工具栏显眼位置。正确路径只有一条:工具 → 同步到数据库…。前提是:模型文件已保存(.mwb)、Navicat 已建立有效数据库连接、且该连接权限包含 CREATE 和 ALTER。
- 如果菜单灰色,先检查是否双击打开了模型文件(而非仅选中)
- 如果弹窗第一步无法选择目标连接,说明当前没有可用的活动连接,需先在连接列表里右键“连接”
- 点完“开始”后卡在“对比”页不动?大概率是模型里某张表名用了数据库保留字(如
order、group),Navicat 尝试读取元数据时被拒绝
生成的 SQL 在 MySQL 里报错 ERROR 1067 怎么办
典型现象是 DATETIME 字段带了 DEFAULT '0000-00-00 00:00:00',MySQL 5.7+ 严格模式下不认这个零日期。Navicat 不会自动帮你适配,默认值策略全靠手动干预。
- 进入
正向工程 → 高级 → DDL 选项,把Default value for TIMESTAMP/DATETIME改成CURRENT_TIMESTAMP - 对已有字段加
NOT NULL,必须同时在模型中为该字段设置Default值(哪怕只是''或0),否则同步时 ALTER TABLE 会因旧数据为 NULL 而中断 - 时间字段若需毫秒精度,不能依赖逻辑模型里的
DateTime类型,得双击字段 → 在Physical Type里手动选DATETIME(3)并勾选「启用精度」
外键建不上、索引丢了、注释全空
Navicat 默认只生成最简 CREATE TABLE,约束、索引、注释全靠手动开开关,而且开关藏得深。
- 外键不会自动生成:必须右键关系线 →
Edit Relationship→ 勾选Enforce Referential Integrity,并填上Name(如fk_user_order) - 索引不是勾字段上的 “Index” 就完事:得进表的
Indexes标签页新建,每条都得命名,否则导出只有INDEX (col)这种无名索引 - 字段注释不输出:在
正向工程 → 高级 → DDL 选项里必须勾选Generate column comments;但注意,MySQL 用COMMENT 'xxx',PostgreSQL 用COMMENT ON COLUMN,语法不通用
最容易被忽略的是模型与连接的 DBMS 版本错位:模型属性里选的是 MySQL 8.0,但实际连接的是 MySQL 5.7,结果 JSON 字段生成即报错;或者模型设了 ENUM,而目标库是 PostgreSQL,导出变成 TEXT CHECK 却没提示。这些兼容性问题,Navicat 从不在预览阶段预警,只在执行时抛错中断。











