Navicat Data Modeler 不支持直接修改已有模型的数据库类型,因字段类型、约束语法等强绑定目标库语义;必须通过“模型转换向导”新建兼容目标库(如 Oracle)的独立模型,并人工核对主键生成、数据类型映射及外键级联等关键项。
navicat data modeler 本身不支持直接“修改已有模型的数据库类型属性”——你不能右键一个 mysql 物理模型,点“属性”,把 database type 下拉框改成 oracle 就完事。这种操作不会重写字段类型、约束语法或生成兼容 sql,只会导致后续同步或导出失败。
为什么不能直接改模型的数据库类型字段
模型在 Navicat 中是强绑定目标数据库语义的:INT(11)、TINYINT、AUTO_INCREMENT 是 MySQL 特有;NUMBER(10,0)、SEQUENCE、GENERATED ALWAYS AS IDENTITY 是 Oracle 特有。模型内部存储的是带上下文的元数据,不是纯文本配置项。
强行修改 Database Type 字段(比如通过编辑器硬改 .ndm 文件)会导致:
- 同步到数据库时抛出
Unsupported data type mapping错误 - 生成的 DDL 脚本含非法语法(如在 Oracle 模型里出现
ENGINE=InnoDB) - 逆向工程或比对功能完全失效
正确做法:用“转换模型向导”新建目标平台模型
必须通过官方路径触发语义转换,让 Navicat 依据内置映射规则重生成对象结构。实际步骤如下:
- 在工作区中,右键原模型 → 选择
模型转换向导(不是“属性”) - 目标模型类型选
物理模型(若原模型已是物理模型,此项可跳过) - 目标数据库选
Oracle,并指定准确版本(如Oracle 19c,不同版本对JSON、XMLTYPE支持不同) - 勾选
转换相关图表(确保关联视图、索引、外键约束一并迁移) - 点击
转换,Navicat 会新建一个独立的 Oracle 模型文件,原模型不受影响
注意:转换后需人工核对三类关键项:主键生成方式(MySQL 的 AUTO_INCREMENT → Oracle 的 SEQUENCE + TRIGGER 或 IDENTITY)、TEXT/BLOB 类型映射(MEDIUMTEXT → CLOB)、默认值语法(CURRENT_TIMESTAMP → SYSTIMESTAMP)。
达梦、人大金仓等国产库的特殊处理
Navicat Premium 自 2025 年起支持达梦(DM8)、人大金仓(KingbaseES V8)等国产数据库的模型转换,但需注意:
- 必须使用
Navicat Premium(Data Modeler 免费版不支持国产库目标类型) - 转换前先确认源模型是否已启用
ANSI SQL 兼容模式(在模型设置中关闭MySQL 扩展语法选项),否则COMMENT ON COLUMN等语句可能丢失 - 达梦对
DECIMAL精度处理与 Oracle 不同,转换后建议检查所有数值字段的scale值是否被截断
国产库模型生成后,务必用 同步到数据库 功能执行一次空运行(勾选 仅生成脚本,不执行),查看输出的 DDL 是否含 CREATE TABLE ... STORAGE(...) 这类达梦特有子句——若缺失,说明转换规则未命中,需手动补全。
同步前必须验证的三个差异点
即使模型转换成功,也不能直接同步。以下三项必须逐个确认:
-
字符集映射:MySQL 的utf8mb4默认映射为 Oracle 的AL32UTF8,但达梦默认用GB18030,需在转换向导的“高级选项”中手动指定 -
索引类型:MySQL 的FULLTEXT索引在 Oracle 中无直接对应,转换后会降级为普通B-TREE,需额外部署 Oracle Text -
外键级联动作:MySQL 支持ON DELETE CASCADE,但达梦 8.1 仅支持NO ACTION和RESTRICT,转换后该属性会被静默丢弃
这些不是界面里能一眼看到的坑,必须打开新生成的模型,双击每个表,进 字段 和 索引 标签页手动翻查。漏掉任意一项,同步到生产库时都可能引发数据一致性故障。











