navicat 15 连接达梦数据库需手动配置 generic jdbc 并使用 dmjdbcdriver18.jar 驱动,类名 dm.jdbc.driver.dmdriver,url 格式为 jdbc:dm://host:port/dbname?useunicode=true&characterencoding=utf-8,驱动必须置于 navicat 安装目录 drivers 子目录下,且逆向工程须勾选“include system tables”才能正确识别外键关系。

Navicat 15 连接达梦数据库前必须确认驱动版本
达梦官方 JDBC 驱动(DmJdbcDriver18.jar)与 Navicat 15 的兼容性不是开箱即用的。Navicat 15 默认只识别常见开源/商业数据库的驱动类名(如 com.mysql.cj.jdbc.Driver),而达梦 8 的标准驱动类是 dm.jdbc.driver.DmDriver,且要求 jar 包放在 Navicat 安装目录下的 drivers 子目录中(Windows 路径类似 C:\Program Files\PremiumSoft\Navicat Premium 15\drivers\)。
容易踩的坑:
- 直接下载达梦官网“最新版”驱动(如
DmJdbcDriver20.jar)可能触发java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter—— 因为该 jar 依赖 Java 8+ 的 JAXB,而 Navicat 内置 JRE 版本较旧;应降级使用DmJdbcDriver18.jar - 把 jar 放错位置(比如放到用户目录或系统 CLASSPATH)不会生效,Navicat 只扫描自身
drivers目录 - 连接测试时若报
Cannot resolve symbol 'DmDriver'或Driver not found,基本就是驱动未加载成功,不是用户名密码问题
新建连接时必须手动填写 JDBC URL 格式
Navicat 15 的达梦连接模板缺失,无法通过下拉菜单选择“Dameng”,必须选“Generic JDBC”并手写 URL。达梦 8 的标准 JDBC URL 形式为:
jdbc:dm://<host>:<port>/<database_name>?useUnicode=true&characterEncoding=UTF-8</database_name></port></host>
关键点:
-
<host></host>填 IP 或主机名,不能填localhost(某些达梦服务端配置会拒绝 loopback 解析);建议用具体 IP,如192.168.1.100 -
<port></port>默认是5236,但达梦安装时可自定义,务必确认服务端dm.ini中PORT_NUM值 -
<database_name></database_name>是实例名(如DAMENG),不是模式名(schema);填错会导致连接成功但后续逆向工程找不到表 - URL 中不能省略
?useUnicode=true&characterEncoding=UTF-8,否则中文字段注释、表名可能乱码,影响 ER 图文字显示
逆向工程时需勾选“包括系统表”才能获取完整外键关系
达梦数据库的外键约束信息分散在系统视图 SYSTABLES、SYSCOLUMNS、SYSFOREIGNKEYS 中,而 Navicat 的逆向工程默认只读取用户模式下的表(即 USER_TABLES 类视图),会跳过外键元数据,导致生成的 ER 图里所有连线都消失。
操作路径:右键连接 → Reverse Database to Model → 在弹出窗口中勾选 Include system tables(即使你只关心自己的 schema,也必须勾)。
其他关键设置:
- Schema 下拉框要选对——达梦区分大小写,
\"SYSDBA\"和sysdba是不同对象;通常业务库 schema 名是小写,但建库时若用双引号定义则需严格匹配 - 取消勾选
Load data types from database(默认已关),否则 Navicat 会尝试映射达梦特有类型(如TEXT、LONGVARCHAR)到不兼容的 MySQL 类型,引发解析中断 - 如果模型生成后只有空画布,检查日志输出栏是否出现
ORA-00942: table or view does not exist—— 这其实是 Navicat 错误复用了 Oracle 错误码,真实原因是没勾Include system tables
ER 图生成后外键线不自动显示?手动刷新关联即可
即使逆向成功,Navicat 15 有时也不会自动绘制外键连线,表现为各表孤立摆放,没有连线箭头。这不是数据没读到,而是 UI 层未触发关系渲染。
解决办法很简单:
- 在模型编辑区空白处右键 → 选择
Layout→Auto Layout,多数情况能恢复连线 - 若仍无反应,选中任意一张表 → 按
Ctrl+U(Windows)或Cmd+U(macOS)执行Update Table,强制重载其约束定义 - 更彻底的方式:导出为
.mwb文件 → 关闭 Navicat → 重启 → 重新打开模型文件,初始化渲染更可靠
注意:达梦的外键约束必须是启用状态(ENABLE),且被引用列要有主键或唯一约束,否则 Navicat 无法识别为有效外键——这点和 MySQL 严格模式逻辑一致,但达梦建表时不显式加 ENABLE 默认是禁用的。











