| 維度 | 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.dll (32-bit) 或 myodbc5w.dll (Unicode)、myodbc5a.dll (ANSI)。C:\Windows\System32\C:\Windows\SysWOW64\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"
odbcad32.exe (32-bit) 或 C:\Windows\SysWOW64\odbcad32.exe (64-bit 系統配置 32-bit DSN),新增「系統 DSN」選擇「MySQL ODBC 5.3 Unicode Driver」。MyApp_MySQL192.168.1.100 (或 localhost)3306app_user******myapp_dbutf8mb4// 標準 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...
ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MyApp_MySQL;User ID=app_user;Password=password;Initial Catalog=myapp_db;'
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),效能與功能更優。
SysWOW64\odbcad32.exe 設定 32-bit DSN;64-bit 應用用預設 odbcad32.exe。Charset=utf8mb4,連線字串加 CharSet=utf8mb4,資料表/欄位確為 utf8mb4。SQLMoreResults 處理,原生 C API 直接 mysql_next_result。