尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Navicat Premium 17 通过 ODBC 连接达梦数据库完整配置指南

Navicat Premium 17 通过 ODBC 连接达梦数据库完整配置指南 1. 为什么要在 Navicat 里连达梦数据库达梦数据库这几年在政企、金融、能源这些圈子里铺得很快很多项目从立项开始就指定要用国产库。但真到了日常开发阶段大家手里最顺手的工具还是 Navicat Premium——界面熟、查询快、数据同步方便。于是问题就来了Navicat 原生并不直接支持达梦的连接协议默认的 MySQL、PostgreSQL、Oracle 这些驱动都接不上。我最早接触这个需求是在一个迁移项目里当时团队要把一批 Oracle 的表结构和数据挪到达梦上开发同学习惯用 Navicat 做数据比对和校验结果发现连不上只能退回达梦自带的 DM 管理工具。那个工具做日常查询还行但涉及到多表关联调试、数据导出成 Excel、批量改数据这些操作效率差了一大截。后来折腾了一圈发现核心思路其实就一条用 ODBC 把达梦包装成 Navicat 能识别的通用数据源。Navicat Premium 17 这个版本对 ODBC 的支持比早期版本稳不少尤其是 17.3 之后的几个小版本在 Windows 上的兼容性明显好了。整个方案不需要改 Navicat 的安装文件也不用替换什么 DLL就是老老实实装达梦的 ODBC 驱动然后在系统里配一个数据源最后在 Navicat 里选 ODBC 类型去连。听起来简单但实际操作里坑不少——驱动版本要对、位数要匹配、环境变量要配、字符集要设对任何一步出问题都会导致连接失败或者查出来乱码。这篇内容适合几类人看一是刚接触达梦、需要日常用 Navicat 做开发的工程师二是做数据库迁移、需要频繁比对两边数据的 DBA三是项目里被指定用达梦但又不熟悉 DM 管理工具的同学。我会把驱动安装、数据源配置、Navicat 连接、常见报错排查这几个环节拆开讲每个步骤都说明为什么这么做以及我踩过的坑。2. 动手前的环境确认与版本选择2.1 确认 Navicat 和达梦的版本匹配关系版本这件事必须先说清楚因为达梦的 ODBC 驱动和 Navicat 的 ODBC 接口之间是有兼容性要求的。我实测下来Navicat Premium 17.3.x 配合达梦 DM8 的 ODBC 驱动是最稳的组合。如果你用的是 Navicat 16大部分情况下也能连上但在处理某些数据类型比如达梦的 HUGEBLOB、自定义类型时会出现字段显示异常。达梦这边DM8 是当前主流版本DM7 虽然还有存量项目在用但它的 ODBC 驱动在 64 位系统上的表现不太理想建议尽量升级到 DM8。查看达梦版本的方法很简单在 DM 管理工具里执行SELECT * FROM V$VERSION;输出里会显示具体的版本号和构建日期。ODBC 驱动的版本最好和数据库服务端版本保持一致至少大版本要相同。比如服务端是 DM8驱动就用 DM8 对应的 ODBC 驱动包不要混用 DM7 的驱动。Navicat 这边打开软件后点“帮助”菜单里的“关于”能看到具体版本号。17.3.10 之后的版本我测过几个ODBC 连接都比较稳定。如果你还在用 17.0 或 17.1建议升一下早期版本在 ODBC 数据源枚举时偶尔会漏掉手动添加的 DSN。2.2 位数问题32 位还是 64 位这是最容易翻车的地方。Windows 系统里ODBC 数据源管理器分两个一个是 64 位的在C:\Windows\System32\odbcad32.exe另一个是 32 位的在C:\Windows\SysWOW64\odbcad32.exe。名字看起来反直觉但事实就是这样——System32 里放的是 64 位版本SysWOW64 里放的是 32 位版本。Navicat Premium 17 在 Windows 上默认是 64 位的所以你必须用 64 位的 ODBC 数据源管理器来配置 DSN并且安装 64 位的达梦 ODBC 驱动。如果你装的是 32 位驱动在 64 位数据源管理器里根本看不到Navicat 自然也连不上。怎么确认 Navicat 的位数打开任务管理器找到 Navicat 进程看“平台”那一列显示 64 位就是 64 位版本。或者直接看安装目录默认在C:\Program Files\PremiumSoft\Navicat Premium 17下面如果是Program Files (x86)那就是 32 位。达梦的 ODBC 驱动安装包通常也会区分位数下载的时候注意看文件名里有没有x64或win64字样。如果拿不准装完之后去 64 位 ODBC 管理器里点“驱动程序”标签页看看列表里有没有出现DM8 ODBC DRIVER有就说明装对了。2.3 提前准备好这些文件动手之前把下面这些东西先备齐避免装到一半发现缺东西达梦数据库安装包里面包含 ODBC 驱动或者单独的 ODBC 驱动安装包Navicat Premium 17 安装程序达梦数据库的连接信息IP、端口默认 5236、用户名、密码确认数据库服务端已经启动并且网络能通达梦的 ODBC 驱动一般在数据库安装目录的drivers\odbc下面如果你已经装了达梦服务端可以直接从那里找。如果没有去达梦官网的下载中心找对应的驱动包。注意不要从第三方渠道下载驱动版本混乱不说还可能带一些莫名其妙的东西。3. 安装达梦 ODBC 驱动的完整过程3.1 运行驱动安装程序达梦的 ODBC 驱动安装包通常是一个独立的 exe或者包含在数据库安装包的组件选项里。如果你是用数据库安装包在安装类型那一步选择“自定义”然后勾选“ODBC 驱动”组件。如果已经有单独的驱动安装包直接双击运行。安装过程中有几个地方要注意第一安装路径不要带中文和空格。我见过有人装在D:\软件\达梦驱动下面结果 ODBC 管理器里能注册上但 Navicat 连接时报“找不到驱动”。改成D:\dm_odbc这种纯英文路径就正常了。这不是达梦独有的问题很多数据库驱动对中文路径的支持都不好。第二安装类型选“完整”或“典型”不要选“最小”。最小安装可能只装了核心 DLL缺少一些必要的配置文件和依赖库后面配 DSN 的时候会报错。第三安装到最后一步安装程序可能会问你要不要“注册数据源”。这里可以先不注册等装完之后手动去 ODBC 管理器里配这样更可控。3.2 验证驱动是否注册成功装完之后立刻去验证。打开 64 位 ODBC 数据源管理器最快的方法是按Win R输入odbcad32.exe回车。注意这样打开的是 64 位版本。如果你想确认可以在管理器窗口的标题栏看到“ODBC 数据源管理器(64 位)”。点“驱动程序”标签页在列表里找DM8 ODBC DRIVER。如果看到了说明驱动注册成功。如果没看到检查两件事一是你是不是用 64 位管理器打开的二是驱动安装目录下的 DLL 文件是否完整。有时候驱动装了但没注册上可以手动注册。以管理员身份打开命令提示符进入驱动安装目录执行regsvr32 dmodbc.dll如果提示“模块已加载但找不到入口点”说明这个 DLL 不是自注册的需要用达梦提供的注册工具一般在安装目录的bin下面有个dmdpc.exe之类的工具具体名字看版本。3.3 配置环境变量容易被忽略的一步达梦的 ODBC 驱动依赖一些环境变量来定位配置文件。如果这一步没做配 DSN 的时候可能连不上或者连上了但字符集不对。需要加的环境变量DM_HOME指向达梦的安装目录比如D:\dmdbmsPATH把达梦的bin目录加进去比如D:\dmdbms\bin加完之后重启一下命令行窗口让环境变量生效。验证方法在命令行里输入echo %DM_HOME%能输出路径就对了。这一步很多人会跳过觉得驱动都装上了还配什么环境变量。但达梦的 ODBC 驱动在初始化连接时会去DM_HOME下面找dm_svc.conf这个文件里面定义了服务名、字符集、连接超时这些参数。如果找不到它会用默认值而默认值在某些场景下会导致连接失败。4. 在 ODBC 管理器里创建数据源4.1 创建系统 DSN 还是用户 DSNODBC 数据源分三种用户 DSN、系统 DSN、文件 DSN。这里建议用系统 DSN原因是 Navicat 在某些情况下以服务或不同用户身份运行时用户 DSN 可能读不到。系统 DSN 对所有用户可见兼容性最好。在 64 位 ODBC 管理器里点“系统 DSN”标签页然后点“添加”。在弹出的驱动列表里选DM8 ODBC DRIVER点“完成”。4.2 填写连接参数接下来会弹出达梦 ODBC 的配置窗口需要填几个关键参数参数名说明示例值数据源名称DSN 的名字自己起后面 Navicat 里要选这个DM8_TEST描述随便填不影响连接达梦测试库服务器数据库 IP 地址192.168.1.100端口达梦默认 52365236用户名数据库账号SYSDBA密码数据库密码你的密码填完之后先别急着点确定点一下“测试连接”。如果提示“连接成功”说明前面的步骤都没问题。如果报错根据错误信息排查常见的有“网络通信失败”检查 IP 和端口、“用户名或密码错误”检查账号密码、“驱动未找到”检查驱动安装。4.3 字符集设置避免乱码的关键达梦的 ODBC 配置里有一个字符集选项通常在“高级”或“选项”标签页里。这个设置直接决定了 Navicat 里查出来的中文会不会变成乱码。达梦数据库服务端一般用GBK或UTF-8字符集。你可以在 DM 管理工具里执行SELECT UNICODE();返回1表示 UTF-8返回0表示 GBK。ODBC 驱动这边的字符集要和服务端保持一致。如果服务端是 UTF-8ODBC 也设成 UTF-8如果服务端是 GBKODBC 就设成 GBK。我遇到过一种情况服务端是 UTF-8ODBC 驱动默认用了 GBK结果 Navicat 里查出来的中文全是问号。改成 UTF-8 之后立刻正常。所以这一步千万别偷懒一定要确认清楚。另外如果你在 Navicat 里做数据导入源文件是 UTF-8 编码但 ODBC 设的是 GBK导入进去的中文也会乱。这种问题排查起来很费时间不如一开始就设对。5. Navicat Premium 17 里建立连接5.1 新建 ODBC 连接打开 Navicat Premium 17点左上角的“连接”按钮在下拉菜单里选“ODBC”。注意不是选 MySQL、PostgreSQL 那些就是选最下面的“ODBC”。弹出连接配置窗口后先填“连接名”随便起一个你认得出来的名字比如“达梦测试库”。然后在“数据源”那一栏点后面的下拉箭头应该能看到刚才在 ODBC 管理器里创建的系统 DSN比如DM8_TEST。选中它。如果你在下拉列表里找不到刚才创建的 DSN检查两件事一是 Navicat 是不是 64 位的二是 DSN 是不是建在“系统 DSN”里而不是“用户 DSN”里。这两个条件必须同时满足。5.2 填写认证信息选了 DSN 之后下面的用户名和密码框可能会自动填充也可能需要手动填。如果 ODBC 配置里已经存了用户名密码这里可以留空如果没存就在这里填上。建议在这里填因为 Navicat 保存连接信息比 ODBC 管理器方便。填完之后点左下角的“测试连接”。如果一切正常会弹出“连接成功”的提示。这时候点“确定”保存连接然后在左侧的连接列表里双击这个连接就能看到达梦数据库里的库、模式、表了。5.3 连接后的界面适配连上之后你会发现Navicat 对达梦的元数据展示和原生支持的数据库有些差异。比如达梦的“模式”在 Navicat 里可能显示为“数据库”层级表、视图、存储过程的分类也可能不完全一样。这是正常的因为 Navicat 是通过 ODBC 通用接口去读元数据的达梦的元数据结构和 MySQL、PostgreSQL 不同Navicat 只能按通用方式展示。日常查询、建表、改数据这些操作都没问题。但有些高级功能比如“数据传输”里的某些选项、“结构同步”的细节对比可能不如原生支持的数据库那么完善。这是 ODBC 方案的固有局限不是配置问题。6. 常见报错与排查技巧实录6.1 连接时报“未找到数据源名称”这个报错最常见原因基本就是 DSN 没建对或者 Navicat 读不到。排查顺序确认 DSN 建在“系统 DSN”里不是“用户 DSN”确认 Navicat 是 64 位DSN 也是用 64 位管理器建的确认 DSN 名称没有拼错Navicat 里选的和 ODBC 里建的要完全一致重启 Navicat有时候它缓存了数据源列表新建的 DSN 需要重启才能看到如果以上都确认了还是不行试试在 Navicat 里手动输入 DSN 名称而不是从下拉列表选。下拉列表偶尔会漏掉一些 DSN。6.2 连接成功但查询中文乱码这个问题前面提过核心是字符集不匹配。排查步骤确认达梦服务端的字符集SELECT UNICODE();确认 ODBC 驱动配置里的字符集设置确认 Navicat 连接的“编码”设置在连接属性里三个地方的字符集要一致。如果服务端是 UTF-8ODBC 和 Navicat 都设 UTF-8。如果服务端是 GBKODBC 和 Navicat 都设 GBK。还有一种情况服务端是 UTF-8ODBC 也设了 UTF-8但 Navicat 里还是乱码。这时候检查 Navicat 的“工具”-“选项”-“环境”里的“编码”设置确保不是设成了“自动”或者某个固定编码。改成“UTF-8”试试。6.3 执行某些 SQL 时报语法错误达梦的 SQL 语法和 MySQL、Oracle 都有差异。比如达梦不支持LIMIT关键字要用ROWNUM或者TOP。如果你在 Navicat 里直接写 MySQL 风格的 SQL达梦服务端会报语法错误。这不是 Navicat 的问题是达梦本身的语法特性。解决办法就是按达梦的语法写 SQL。达梦官方有 SQL 语法手册常用的差异点分页用LIMIT不行用SELECT * FROM (SELECT ROWNUM RN, T.* FROM TABLE T) WHERE RN BETWEEN 1 AND 10字符串拼接用||而不是CONCAT日期函数NOW()不行用SYSDATE或CURRENT_TIMESTAMP6.4 数据导入时编码报错从 Navicat 往达梦导入数据时如果源文件编码和 ODBC 字符集不一致会报编码错误。比如源文件是 UTF-8ODBC 设的是 GBK导入时就会提示“本地编码:PG_GBK, 导入文件编码:PG_UTF8”之类的错误。解决办法要么把源文件转成和 ODBC 一致的编码要么在导入向导里手动指定文件编码。Navicat 的导入向导里有编码选项选对就行。6.5 驱动安装后 ODBC 管理器里看不到这种情况通常是位数问题。你装的是 32 位驱动但打开的是 64 位管理器自然看不到。反过来也一样。确认方法在 ODBC 管理器的“驱动程序”标签页里看看有没有DM8 ODBC DRIVER。如果没有去驱动安装目录看看 DLL 文件在不在。如果 DLL 在但管理器里没有说明注册失败需要手动注册或者重新安装。7. 日常使用中的经验与技巧7.1 查询性能调优通过 ODBC 连接达梦查询性能会比原生连接稍慢一些因为多了一层 ODBC 的转换。如果发现查询特别慢可以试试这几个方法第一在 ODBC 配置里把“Fetch Size”调大。默认可能是 100 或更小改成 1000 或 5000批量取数会快很多。这个选项在 ODBC 配置的“高级”标签页里。第二避免在 Navicat 里执行SELECT *查大表。ODBC 会把所有字段都取回来包括那些你不需要的大字段比如 BLOB、CLOB很影响速度。明确写出需要的字段。第三如果只是做数据比对用 Navicat 的“数据传输”功能比手动写 SQL 快。但注意传输时的批量提交大小设太小会频繁提交设太大又占内存。我一般设 1000 到 5000 之间。7.2 连接保持与超时设置达梦服务端有连接空闲超时机制默认可能是 30 分钟或 1 小时。如果 Navicat 连接空闲时间长了再操作时会报“连接已断开”。解决办法是在 ODBC 配置里把“连接超时”设大一些或者在 Navicat 的连接属性里勾选“自动重连”。Navicat 的“自动重连”在连接属性的“高级”标签页里勾上之后连接断了会自动重连不用手动重开。7.3 备份连接配置ODBC 的 DSN 配置存在注册表里重装系统或换机器时容易丢。建议把配置导出备份。方法在 ODBC 管理器里选中 DSN点“配置”旁边的“导出”存成一个.reg文件。换机器时双击导入就行。Navicat 的连接配置也可以导出。右键连接选“导出连接”存成.ncx文件。这个文件里包含连接信息但密码是加密的换机器导入后需要重新输入密码。7.4 多版本共存的处理如果你机器上同时装了 Navicat 16 和 17或者同时有达梦 DM7 和 DM8 的驱动可能会冲突。表现是 Navicat 里选 DSN 时列表混乱或者连接时报驱动版本不匹配。解决办法尽量只保留一个版本的达梦 ODBC 驱动。如果必须共存给 DSN 起不同的名字比如DM7_TEST和DM8_TEST在 Navicat 里选对应的。驱动本身一般不会冲突因为 DLL 名字不同但注册表里的驱动名称可能会覆盖。8. 关于授权与长期使用的说明Navicat Premium 是商业软件官方提供 14 天试用。试用期过后需要购买授权才能继续使用。网上流传的各种注册码、激活工具我不建议使用原因有两个一是安全性无法保证很多激活工具本身带恶意代码二是商业软件用正版授权后续升级和技术支持都有保障。如果你只是短期项目需要可以考虑 Navicat 的月度订阅比一次性买永久授权便宜不少。达梦这边ODBC 驱动是随数据库授权的只要你买了达梦的授权驱动就可以正常使用没有额外的费用。对于长期使用我的建议是如果项目预算允许买正版 Navicat 授权如果预算紧张可以考虑用 DBeaver 这类开源工具它也支持通过 ODBC 连达梦功能虽然不如 Navicat 全面但日常查询够用了。9. 替代方案与扩展思路9.1 用 DBeaver 连接达梦DBeaver 是一个开源的多数据库客户端社区版免费。它支持 JDBC 连接达梦官方提供了 JDBC 驱动。配置方法在 DBeaver 里新建连接选“Generic JDBC”然后加载达梦的 JDBC 驱动 jar 包填连接 URLjdbc:dm://192.168.1.100:5236DBeaver 的好处是免费、跨平台Windows、Mac、Linux 都能用。缺点是界面和操作习惯跟 Navicat 差异较大需要适应。9.2 用 Python 脚本做批量操作如果你需要做大批量的数据迁移或校验用 Navicat 手动操作效率太低。可以写 Python 脚本用dmPython库达梦官方提供的 Python 驱动直接连数据库。示例import dmPython conn dmPython.connect(userSYSDBA, password密码, server192.168.1.100, port5236) cursor conn.cursor() cursor.execute(SELECT * FROM YOUR_TABLE) for row in cursor.fetchall(): print(row) cursor.close() conn.close()这种方式适合做自动化的数据比对、批量导出导入比在 Navicat 里点来点去快得多。9.3 自然语言查询达梦的探索最近有一些工具在做自然语言转 SQL 的事情比如用大模型把“查一下上个月销售额最高的十个客户”这种话转成 SQL 语句然后去达梦上执行。这个思路在达梦上也能用核心是把达梦的表结构、字段注释喂给模型让它生成符合达梦语法的 SQL。我试过用一些开源框架做这个事效果取决于表结构的规范程度。如果表名、字段名都是拼音缩写模型很难理解如果字段注释写得清楚准确率会高很多。这个方向目前还在早期适合做辅助查询不适合直接上生产。10. 我踩过的几个坑和最后的小建议第一个坑驱动装完没重启。达梦的 ODBC 驱动装完之后最好重启一次机器至少重启一下 Navicat 和 ODBC 管理器。我有一次装完直接配 DSN怎么都连不上重启之后就好了。原因是驱动注册表项需要重新加载。第二个坑防火墙没放行。达梦默认端口 5236如果服务器开了防火墙这个端口没放行Navicat 连接时会报“网络通信失败”。排查的时候先telnet一下端口通不通不通就先查防火墙。第三个坑密码里有特殊字符。达梦的密码如果包含、#、$这些字符在 ODBC 配置里可能被截断或转义。解决办法是在 Navicat 里填密码而不是在 ODBC 配置里存密码。Navicat 对特殊字符的处理比 ODBC 管理器好。最后分享一个小技巧如果你经常需要在多个达梦库之间切换可以在 Navicat 里建多个 ODBC 连接每个连接对应一个 DSN。然后在 Navicat 的“查询”窗口里用“连接”下拉框快速切换。比每次去 ODBC 管理器改配置快得多。另外Navicat 的“收藏夹”功能可以把你常用的查询存起来下次直接点收藏夹里的条目就能执行不用重新写 SQL。对于经常要跑的巡检脚本、数据校验脚本这个功能很省时间。
返回列表