ODBC (Open Database Connectivity) 是 Windows 平台通用資料存取介面。本文記錄 MyODBC 驅動安裝、系統 DSN 建立、連線測試與常見問題排查全流程。
mysql-connector-odbc-8.0.x-winx64.msiMySQL ODBC 8.0 Unicode Driver 與 MySQL ODBC 8.0 ANSI DriverMySQL ODBC 8.0 Unicode Driver (支援 UTF-8/utf8mb4,推薦)| 欄位 | 範例值 | 說明 |
|---|---|---|
| Data Source Name | MySQL_Production | DSN 名稱,應用程式引用 |
| Description | Production MySQL Server | 描述 |
| TCP/IP Server | 192.168.1.100 | 主機 IP 或主機名 |
| Port | 3306 | 預設埠 |
| User | app_user | 資料庫帳號 |
| Password | ******** | 密碼 (可選,應用層提供更安全) |
| Database | business_db | 預設資料庫 |
utf8mb4 (關鍵!防中文亂碼)No,有憑證配置路徑Data → Get Data → From Database → From ODBC → DSN: MySQL_Production
External Data → ODBC Database → Machine Data Source → MySQL_Production
using System.Data.Odbc;
string connStr = "DSN=MySQL_Production;UID=app_user;PWD=pass;";
using (var conn = new OdbcConnection(connStr)) {
conn.Open();
using (var cmd = new OdbcCommand("SELECT VERSION()", conn))
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) Console.WriteLine(reader[0]);
}
}
import pyodbc
conn = pyodbc.connect('DSN=MySQL_Production;UID=app_user;PWD=pass;')
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
print(cursor.fetchone())
Driver={MySQL ODBC 8.0 Unicode Driver};
Server=192.168.1.100;
Port=3306;
Database=business_db;
UID=app_user;
PWD=pass;
Charset=utf8mb4;
Option=3;
| 現象 | 原因 | 解決 |
|---|---|---|
| 驅動程式不在清單中 | 位元數不匹配 (64 位 OS 裝 32 位驅動) | 安裝對應位元驅動,或啟用 IIS 32 位應用程式 |
| Connection failed: Access denied | 帳號/密碼/主機不匹配、caching_sha2_password | GRANT ...@'%'、FLUSH PRIVILEGES、驅動啟用 Cleartext Plugin |
| 中文亂碼 | Character Set 未設定或不匹配 | DSN/連線字串強制 Charset=utf8mb4 |
| SSL connection error | MySQL 8.0 預設要求 SSL | DSN 設 SSL=No、或配置 CA 憑證 |
| Lost connection during query | wait_timeout/interactive_timeout 過短 | 調大伺服器參數、應用層重連機制 |
GRANT SELECT, INSERT, UPDATE, DELETE ON db.* TO 'app_user'@'%' IDENTIFIED BY 'strong_pass';ODBC 是 Windows 生態連接 MySQL 的標準橋樑。正確安裝驅動、配置 UTF-8 字元集、採用 DSN 統一管理,能避免 90% 的連線與亂碼問題。