針對 VC++、Delphi、VB 等桌面開發工具,本文詳述 MyODBC 驅動的兩種部署方式:完整安裝包與最小化手動註冊 DLL,並提供註冊表配置範本與 ODBC 資料源建立步驟。
| 方式 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 完整安裝包 | 自動註冊、含管理工具、相容性佳 | 體積大 (數十 MB)、安裝時間長 | 開發機、測試環境、需 GUI 管理 |
| 手動註冊 myodbc.dll | 極輕量 (~300KB)、部署快、適合打包發布 | 需手寫註冊表、易遺漏步驟、無管理工具 | 生產環境客戶端部署、綠色軟體、嵌入式系統 |
# 32 位系統
copy myodbc.dll C:\Windows\System32\
# 64 位系統 (需 32 位 ODBC 驅動給 32 位應用用)
copy myodbc.dll C:\Windows\SysWOW64\
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MyODBC Driver]
"UsageCount"=dword:00000002
"Driver"="C:\\Windows\\System32\\myodbc.dll"
"Setup"="C:\\Windows\\System32\\myodbc.dll"
"SQLLevel"="1"
"FileUsage"="0"
"DriverODBCVer"="02.50"
"ConnectFunctions"="YYY"
"APILevel"="1"
"CpTimeout"="120"
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"MyODBC Driver"="installed"
關鍵說明**:
\\ 為註冊表規範Driver 與 Setup 同指向同一 DLL (MyODBC 整合驅動與安裝程式)ConnectFunctions="YYY" 表示支援 SQLConnect, SQLDriverConnect, SQLBrowseConnectmyodbc.reg → 是/確定匯入odbcad32.exe)MySQL_Northwind)localhost 或 IP3306rootCDatabase db;
db.OpenEx("DSN=MySQL_Northwind;UID=root;PWD=password", CDatabase::noOdbcDialog);
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, "SELECT * FROM products");
// 遍歷 rs.GetFieldValue()...
// ADO 方式
ADOConnection1.ConnectionString :=
'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MySQL_Northwind';
ADOConnection1.Open;
ADOQuery1.SQL.Text := 'SELECT * FROM products';
ADOQuery1.Open;
Dim cn As New ADODB.Connection
cn.Open "DSN=MySQL_Northwind;UID=root;PWD=password"
Dim rs As New ADODB.Recordset
rs.Open "SELECT * FROM products", cn, adOpenStatic, adLockReadOnly
ASP 必須使用 ODBC (不支援 MySQL 原生 API)。配置系統 DSN 後:
<% Set conn = Server.CreateObject("ADODB.Connection") conn.Open "DSN=MySQL_Northwind;UID=root;PWD=password" Set rs = conn.Execute("SELECT * FROM products") %>注意:ASP 在 IIS 進程中運行,需確保 ODBC 連線池配置正確,避免連線洩漏導致網站掛起。
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 找不到驅動程式 | 註冊表路徑錯誤、DLL 版本不符 (32/64位) | 檢查 Registry 路徑、使用 SysWOW64 目錄、確認驅動版本 |
| 連線失敗 2003/2005 | MySQL 服務未啟動、防火牆阻擋 3306、bind-address 錯誤 | 啟動服務、開放防火牆、my.cnf 設定 bind-address=0.0.0.0 |
| 中文亂碼 | 字元集不匹配 | 連線字串加 CHARSET=utf8mb4、資料庫/表/欄位統一 utf8mb4 |
| 驅動程式不支援功能 | MyODBC 版本過舊 | 升級至 MySQL Connector/ODBC 8.0+ (現代驅動名稱) |
unixODBC + MySQL Connector/ODBC,配置 /etc/odbcinst.ini、/etc/odbc.ini