據(jù)庫:ODBC 驅(qū)動配置與實戰(zhàn)指南)
1. 為什么要在 Navicat 里連達夢數(shù)據(jù)庫達夢數(shù)據(jù)庫這幾年在信創(chuàng)項目里出現(xiàn)得越來越頻繁很多原來用 MySQL、Oracle 的團隊項目要求國產(chǎn)化替換之后開發(fā)機上都裝了一套達夢。但問題也隨之而來習慣了 Navicat 那套圖形化操作的人突然要回到命令行去敲 disql效率直接砍半。所以“Navicat 怎么連達夢”這個問題幾乎每個剛接觸達夢的開發(fā)者都會問一遍。先把結(jié)論說清楚Navicat 本身并不原生支持達夢數(shù)據(jù)庫它內(nèi)置的驅(qū)動列表里沒有 DM 這個選項。但達夢官方提供了兼容 ODBC 和 JDBC 的驅(qū)動Navicat 又支持通過 ODBC 方式連接“其他”類型的數(shù)據(jù)庫所以這條路是走得通的。核心思路就是裝好達夢的 ODBC 驅(qū)動在系統(tǒng)里配一個數(shù)據(jù)源然后在 Navicat 里選 ODBC 方式連過去。這套方案適合誰一是手上已經(jīng)有 Navicat Premium15/16/17 都行的開發(fā)者不想為了達夢再單獨學一套管理工具二是做數(shù)據(jù)庫遷移、數(shù)據(jù)比對、日常查數(shù)的運維和測試人員三是學生或者剛?cè)胄械呐笥驯镜匮b了達夢做練習想找個順手的客戶端。需要說明的是Navicat 免費版Navicat Premium Lite在連接方式上限制較多ODBC 這條路徑不一定走得通建議用完整版來操作。下面我會把整個流程拆成幾個部分先講清楚方案選型的邏輯再講驅(qū)動安裝和 ODBC 配置的細節(jié)然后是 Navicat 里的實際操作最后是我自己踩過的坑和排查經(jīng)驗。每一步都會說明“為什么這么做”而不是只給一串點擊順序。2. 方案選型為什么走 ODBC 而不是別的路2.1 Navicat 支持哪些連接方式Navicat Premium 連接數(shù)據(jù)庫底層其實就三種通道原生驅(qū)動比如 MySQL、PostgreSQL 這些它自己內(nèi)置了協(xié)議實現(xiàn)的、ODBC 數(shù)據(jù)源、以及部分版本支持的 JDBC 橋接。達夢不在它的原生支持列表里所以只能走后兩種。JDBC 這條路在 Navicat 里并不是所有版本都開放而且配置起來要手動指定 jar 包路徑不同 Navicat 版本對 JDK 版本還有要求容易出兼容問題。相比之下ODBC 是操作系統(tǒng)層面的標準接口達夢官方驅(qū)動對 Windows 的支持很成熟配置一次之后所有支持 ODBC 的工具都能復用通用性更好。所以我的建議很明確Windows 環(huán)境下優(yōu)先走 ODBC。Linux 和 macOS 下 Navicat 對 ODBC 的支持相對弱一些macOS 上甚至需要額外裝 ODBC 管理器配置成本高這種情況我會更傾向于直接用達夢自帶的 DM 管理工具或者用 DBeaver 配合 JDBC 驅(qū)動。2.2 版本搭配的注意事項這里有個容易被忽略的點達夢的 ODBC 驅(qū)動版本要和數(shù)據(jù)庫服務(wù)端版本大致匹配。比如你連的是 DM8就裝 DM8 對應(yīng)的驅(qū)動包如果拿 DM7 的驅(qū)動去連 DM8多數(shù)情況下能連上但遇到新特性或者字符集相關(guān)的操作可能會報奇怪的錯。Navicat 這邊Premium 15 及以上版本對 ODBC 的支持都比較穩(wěn)定17 和 18 在界面細節(jié)上有調(diào)整但核心邏輯一樣。我實測下來Navicat Premium 17 配合 DM8 的 ODBC 驅(qū)動在 Windows 10/11 上是最省心的組合。組合項推薦選擇說明Navicat 版本Premium 15/16/17完整版Lite 版功能受限達夢版本DM8驅(qū)動與服務(wù)端版本保持一致操作系統(tǒng)Windows 10/11ODBC 支持最完善連接方式ODBC通用性強配置一次可復用驅(qū)動位數(shù)與 Navicat 一致32 位配 32 位64 位配 64 位提示驅(qū)動位數(shù)這一條是新手最容易翻車的地方。如果你的 Navicat 是 64 位的卻裝了 32 位的 ODBC 驅(qū)動在 ODBC 數(shù)據(jù)源管理器里根本看不到那個數(shù)據(jù)源Navicat 里自然也選不到。3. 達夢 ODBC 驅(qū)動的安裝與配置細節(jié)3.1 找到并安裝驅(qū)動達夢安裝完成后驅(qū)動文件通常在安裝目錄下的drivers\odbc文件夾里。如果你裝的是完整版服務(wù)端這個目錄一般已經(jīng)存在如果只裝了客戶端可能需要單獨確認一下。驅(qū)動核心文件是dodbc.dll64 位或?qū)?yīng)的 32 位版本以及配套的配置文件。安裝驅(qū)動有兩種方式。一種是運行驅(qū)動目錄里的安裝腳本它會自動把驅(qū)動注冊到系統(tǒng)另一種是手動在 ODBC 數(shù)據(jù)源管理器里添加。我一般推薦先看驅(qū)動目錄里有沒有install.bat之類的腳本有的話直接以管理員身份運行省事且不容易漏步驟。手動注冊的話需要把驅(qū)動 dll 的路徑記下來后面在 ODBC 管理器里添加驅(qū)動時會用到。這里要特別注意路徑里不要有中文和空格雖然理論上支持但實際配置中帶空格的路徑偶爾會導致驅(qū)動加載失敗能避則避。3.2 配置系統(tǒng) DSN打開 Windows 的“ODBC 數(shù)據(jù)源管理器”注意要選對位數(shù)版本——64 位系統(tǒng)里默認打開的是 64 位版本如果你需要 32 位的要去SysWOW64目錄下找odbcad32.exe手動運行。在“系統(tǒng) DSN”標簽頁里點“添加”如果驅(qū)動注冊成功列表里應(yīng)該能看到類似 “DM8 ODBC DRIVER” 的選項。選中之后會彈出配置窗口需要填幾個關(guān)鍵參數(shù)數(shù)據(jù)源名稱自己起個名字比如DM_TEST后面 Navicat 里就靠這個名字找數(shù)據(jù)源服務(wù)器地址達夢服務(wù)端的 IP本機就是127.0.0.1端口達夢默認端口是5236如果改過就填實際端口用戶名/密碼可以在這里填也可以留空在 Navicat 里填數(shù)據(jù)庫名達夢的庫概念和 MySQL 不太一樣這里一般填實例名或者留空配置完成后可以點“測試連接”驗證一下能通就說明驅(qū)動和數(shù)據(jù)源都沒問題。這一步通過之后Navicat 那邊基本就是水到渠成。3.3 字符集相關(guān)的設(shè)置達夢的字符集在初始化實例時就定下來了常見的有 UTF-8 和 GBK 兩種。ODBC 驅(qū)動這邊一般不需要額外指定字符集它會自動協(xié)商。但如果你在導入導出數(shù)據(jù)時遇到中文亂碼就要回頭檢查兩邊的字符集是否一致。我遇到過一種情況數(shù)據(jù)庫是 UTF-8但導入的 CSV 文件是 GBK 編碼結(jié)果中文全變成問號。這種問題不在連接環(huán)節(jié)而在數(shù)據(jù)導入環(huán)節(jié)解決辦法是在導入向?qū)Ю锸謩又付ㄎ募幋a或者提前把文件轉(zhuǎn)成 UTF-8。熱詞里提到的“本地編碼 pg_gbk導入文件編碼 pg_utf8”其實就是這類問題的典型表現(xiàn)本質(zhì)是源文件和目標庫編碼不匹配。4. 在 Navicat 里完成連接的實際操作4.1 新建連接并選擇 ODBC打開 Navicat點“連接”按鈕在數(shù)據(jù)庫類型列表里往下拉找到 “ODBC” 這一項。注意不是 “ODBC (32-bit)” 就是普通的 “ODBC”具體選哪個取決于你前面配的數(shù)據(jù)源位數(shù)。選中之后彈出連接配置窗口這里最關(guān)鍵的一步是在“數(shù)據(jù)源”下拉框里選中你剛才在系統(tǒng) DSN 里配好的那個名字比如DM_TEST。選中的瞬間下面的服務(wù)器、端口等字段可能會自動帶出來也可能需要手動補。如果下拉框里是空的說明 Navicat 沒找到任何 ODBC 數(shù)據(jù)源八成是位數(shù)不匹配或者數(shù)據(jù)源沒配成功。用戶名和密碼這里填達夢的賬號默認管理員是SYSDBA密碼在安裝時設(shè)定。填完之后點“測試連接”正常情況下會彈出連接成功的提示。4.2 連接建立后的界面差異連上之后你會發(fā)現(xiàn)Navicat 對達夢的展示和 MySQL 有些不一樣。達夢的模式Schema概念比較接近 Oracle一個用戶默認對應(yīng)一個同名模式。在 Navicat 左側(cè)樹里你會看到“模式”這一層展開之后才是表、視圖、存儲過程等對象。這里有個小坑如果你用 SYSDBA 登錄默認看到的可能是 SYSDBA 模式下的對象而業(yè)務(wù)數(shù)據(jù)往往在別的模式里。這時候需要在連接屬性里設(shè)置默認模式或者在查詢時用模式名.表名的方式限定。我一般建議在連接配置的高級選項里直接把默認模式設(shè)成業(yè)務(wù)模式省得每次寫 SQL 都要帶前綴。4.3 查詢與日常操作的適配Navicat 的查詢編輯器對達夢的 SQL 語法支持總體不錯但達夢的 SQL 方言和 MySQL 有差異比如分頁用的是LIMIT還是ROWNUM日期函數(shù)的名字也不一樣。寫 SQL 的時候如果報語法錯誤先別懷疑連接有問題多半是方言不匹配。數(shù)據(jù)傳輸功能工具里的“數(shù)據(jù)傳輸”在 ODBC 連接下也能用可以做達夢到 MySQL、達夢到達夢之間的表數(shù)據(jù)搬運。但要注意跨庫傳輸時字段類型映射不一定完美比如達夢的某些數(shù)值類型到了 MySQL 可能要手動調(diào)整。傳輸前建議先做一次結(jié)構(gòu)比對別直接全量懟過去。操作場景是否支持注意事項瀏覽表結(jié)構(gòu)支持模式層級需注意執(zhí)行 SQL 查詢支持注意方言差異數(shù)據(jù)導入導出支持編碼要對齊數(shù)據(jù)傳輸支持類型映射需檢查存儲過程調(diào)試部分支持復雜調(diào)試建議用官方工具備份還原不支持用達夢自帶工具5. 常見問題與排查技巧實錄5.1 數(shù)據(jù)源列表為空怎么辦這是最高頻的問題。Navicat 里 ODBC 連接的數(shù)據(jù)源下拉框空空如也原因基本就三個驅(qū)動沒裝好、數(shù)據(jù)源沒配、位數(shù)不匹配。排查順序是先打開 ODBC 數(shù)據(jù)源管理器確認系統(tǒng) DSN 里有沒有你配的那個源有的話再看 Navicat 的位數(shù)64 位 Navicat 只能看到 64 位數(shù)據(jù)源。如果 ODBC 管理器里也看不到那就是驅(qū)動注冊失敗了?;仡^檢查驅(qū)動安裝腳本是不是用管理員權(quán)限跑的或者手動添加驅(qū)動時 dll 路徑有沒有寫錯。5.2 連接測試報“無法連接”或超時數(shù)據(jù)源能選到但測試連接失敗先分清楚是網(wǎng)絡(luò)問題還是認證問題。用達夢自帶的 disql 工具從同一臺機器連一下如果 disql 也連不上那就是網(wǎng)絡(luò)或者服務(wù)端的問題跟 Navicat 無關(guān)。如果 disql 能連而 Navicat 連不上檢查端口填對沒有以及 ODBC 數(shù)據(jù)源里配的服務(wù)器地址是不是127.0.0.1而 Navicat 里又覆蓋成了別的地址。還有一種情況是達夢服務(wù)端的連接數(shù)滿了或者該用戶被限制了登錄 IP。這些都要到服務(wù)端去查客戶端這邊折騰沒用。5.3 中文亂碼的處理思路亂碼問題要分場景。如果是查詢結(jié)果里的中文顯示亂碼檢查 Navicat 連接的編碼設(shè)置以及數(shù)據(jù)庫本身的字符集。如果是導入數(shù)據(jù)時亂碼檢查源文件編碼。達夢在 Windows 下默認可能是 GBK而你的文件是 UTF-8這種不匹配必然亂碼。我的習慣是建庫時就統(tǒng)一用 UTF-8所有導入文件也統(tǒng)一轉(zhuǎn)成 UTF-8從源頭避免這個問題。已經(jīng)建好的 GBK 庫導入前用工具把文件轉(zhuǎn)碼或者在導入向?qū)Ю锩鞔_指定文件編碼。5.4 常見問題速查表現(xiàn)象可能原因解決方向數(shù)據(jù)源下拉為空位數(shù)不匹配/驅(qū)動未注冊檢查 ODBC 管理器位數(shù)測試連接超時網(wǎng)絡(luò)/端口/服務(wù)未啟動用 disql 交叉驗證登錄失敗賬號密碼錯/IP 限制核對賬號查服務(wù)端配置中文亂碼字符集不一致統(tǒng)一 UTF-8 或指定編碼SQL 報語法錯方言差異改用達夢語法看不到業(yè)務(wù)表默認模式不對設(shè)置默認模式或加前綴傳輸數(shù)據(jù)失敗類型映射問題逐字段檢查映射關(guān)系提示排查問題時養(yǎng)成“分層驗證”的習慣——先用官方工具驗證服務(wù)端可達再驗證 ODBC 數(shù)據(jù)源可用最后才懷疑 Navicat。這樣能快速定位問題出在哪一層不至于在客戶端瞎折騰。6. 一些實操心得和延伸建議6.1 關(guān)于工具選擇的個人看法Navicat 連達夢這套方案勝在復用已有的操作習慣適合已經(jīng)在用 Navicat 管 MySQL 的團隊平滑過渡。但它終究是“曲線救國”在存儲過程調(diào)試、執(zhí)行計劃分析這些深度功能上還是達夢自帶的 DM 管理工具更專業(yè)。我的做法是日常查數(shù)、導數(shù)據(jù)用 Navicat遇到復雜調(diào)優(yōu)再切回官方工具兩者互補。另外提一句熱詞里頻繁出現(xiàn)的“永久許可密鑰”“注冊碼”這類內(nèi)容我不做任何展開。工具用正版還是試用版是個人選擇但從穩(wěn)定性和安全性角度建議通過正規(guī)渠道獲取授權(quán)避免因為來路不明的激活方式引入風險。6.2 遷移場景下的額外注意點如果這套連接是為了做數(shù)據(jù)庫遷移比如從 MySQL 遷到達夢那連接只是第一步。遷移工具的選擇、表結(jié)構(gòu)的轉(zhuǎn)換、數(shù)據(jù)類型的映射、以及遷移時的“先刪后插入”策略每一個都是獨立的坑。達夢官方有遷移工具Navicat 的數(shù)據(jù)傳輸也能做一部分但大規(guī)模遷移我建議用官方工具配合人工校驗別指望一鍵搞定。遷移時特別要注意自增列、默認值、索引命名這些細節(jié)不同數(shù)據(jù)庫的處理方式不一樣自動轉(zhuǎn)換經(jīng)常出偏差。遷完之后一定要做數(shù)據(jù)量比對和抽樣校驗別遷完就完事。6.3 給新手的上手路徑建議如果你是第一次接觸達夢我的建議路徑是先裝達夢服務(wù)端用 disql 熟悉基本操作和 SQL 方言然后配 ODBC 數(shù)據(jù)源用系統(tǒng)自帶的測試功能確認連通最后再上 Navicat 做圖形化操作。這個順序能讓你在每一步都有明確的驗證手段出問題也知道是哪一層的事。反過來一上來就裝 Navicat 然后連不上你會同時面對驅(qū)動、數(shù)據(jù)源、Navicat 配置三個變量排查起來非常痛苦。分層推進是省時間的最優(yōu)解。最后分享一個小技巧配好一個可用的 ODBC 數(shù)據(jù)源之后把它導出成注冊表文件備份起來。換機器或者重裝系統(tǒng)時直接導入省去重新配置的麻煩。這個操作在 ODBC 數(shù)據(jù)源管理器里就有很多人不知道。