萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

VC/Delphi 接入 MySQL 完全指南:ODBC 驅動安裝與註冊表配置

兩種接入架構對比

維度MySQL C API (libmysql)MyODBC (ODBC 驅動)
適用語言C/C++、Delphi、VB (需封裝)所有支援 ODBC 的語言 (VC、Delphi、VB、C#、ASP、PowerBuilder)
部署複雜度需隨程式分發 libmysql.dll,處理版本相依系統層安裝驅動,應用程式零相依
功能完整性100% MySQL 功能 (預存程序、多語句、非同步)ODBC 標準子集,部分 MySQL 專有功能受限
效能原生協定,延遲最低經 ODBC 管理器轉換,微小開銷
跨資料庫移植綁定 MySQL理論上可無縫切換至其他 ODBC 資料源

MyODBC 3.51/5.x 手動部署步驟 (免安裝包)

  1. 取得驅動檔:從官網下載 myodbc.dll (32-bit) 或 myodbc5w.dll (Unicode)、myodbc5a.dll (ANSI)。
  2. 放置系統目錄:
    • 32-bit 系統:C:\Windows\System32\
    • 64-bit 系統 (32-bit 應用):C:\Windows\SysWOW64\
  3. 匯入註冊表:建立 myodbc.reg,內容如下 (依實際路徑調整):
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.3 Unicode Driver]
"Driver"="C:\\Windows\\SysWOW64\\myodbc5w.dll"
"Setup"="C:\\Windows\\SysWOW64\\myodbc5w.dll"
"UsageCount"=dword:00000001
"SQLLevel"="1"
"FileUsage"="0"
"DriverODBCVer"="03.51"
"ConnectFunctions"="YYY"
"APILevel"="1"
"CpTimeout"=dword:00000078

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"MySQL ODBC 5.3 Unicode Driver"="Installed"
  1. 雙擊匯入,打開 odbcad32.exe (32-bit) 或 C:\Windows\SysWOW64\odbcad32.exe (64-bit 系統配置 32-bit DSN),新增「系統 DSN」選擇「MySQL ODBC 5.3 Unicode Driver」。
  2. DSN 設定範例:
    • Data Source Name: MyApp_MySQL
    • Server: 192.168.1.100 (或 localhost)
    • Port: 3306
    • User: app_user
    • Password: ******
    • Database: myapp_db
    • Charset: utf8mb4

VC++ (MFC/ODBC API) 連線範例

// 標準 ODBC API 序列
SQLHENV hEnv; SQLHDBC hDbc; SQLHSTMT hStmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
SQLConnect(hDbc, (SQLCHAR*)"MyApp_MySQL", SQL_NTS, (SQLCHAR*)"app_user", SQL_NTS, (SQLCHAR*)"password", SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
SQLExecDirect(hStmt, (SQLCHAR*)"SELECT VERSION()", SQL_NTS);
SQLCHAR version[64]; SQLLEN len;
SQLBindCol(hStmt, 1, SQL_C_CHAR, version, sizeof(version), &len);
SQLFetch(hStmt);
printf("MySQL Version: %s\n", version);
// 清理 handles...

Delphi (ADO / dbExpress / FireDAC) 連線

ADO (TADOConnection)

ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MyApp_MySQL;User ID=app_user;Password=password;Initial Catalog=myapp_db;'

FireDAC (TFDConnection) - 推薦現代專案

DriverID = MySQL
Server = 192.168.1.100
Port = 3306
Database = myapp_db
User_Name = app_user
Password = password
CharacterSet = utf8mb4

FireDAC 可直接使用 libmysql.dll (原生),也可走 ODBC (DriverID=ODBC),效能與功能更優。

常見坑與解決

  • 64-bit 系統找不到 DSN:32-bit 應用必須用 SysWOW64\odbcad32.exe 設定 32-bit DSN;64-bit 應用用預設 odbcad32.exe。
  • 中文亂碼:DSN 設定 Charset=utf8mb4,連線字串加 CharSet=utf8mb4,資料表/欄位確為 utf8mb4。
  • 預存程序多結果集:ODBC 需 SQLMoreResults 處理,原生 C API 直接 mysql_next_result。
  • 連線池:ODBC 連線池 (CPTimeout) 預設 120 秒,高併發需調大或改用應用層連線池。
copyright © 萬盛學電腦網 all rights reserved