MySQL 遷移 SQL Server 2008 完整實戰:SSMA 工具鏈、雙架構 ODBC 與遷移精靈操作指南
專案需將 MySQL 資料庫遷移至 SQL Server 2008。本文記錄從工具下載、ODBC 雙架構配置、遷移精靈操作到驗證的完整流程,避開版本不匹配、驅動位數不符等常見坑點。
前置準備
- 來源:MySQL 5.x/8.x 資料庫
- 目標:SQL Server 2008 (含 Express/R2)
- 工具:**Microsoft SQL Server Migration Assistant 2008 for MySQL (SSMA 2008)** — 注意必須用 2008 版,2012 版不支援 2008 目標
關鍵步驟:ODBC 驅動雙架構安裝
- 下載 MySQL ODBC Driver (Connector/ODBC) **32-bit 與 64-bit 兩版**
- 分別安裝 (預設路徑不同)
- 控制台 → 系統管理工具 → **ODBC 資料來源 (32-bit)** 與 **(64-bit)** 兩者皆配置:
資料來源名: MySQL_ODBC_32 / MySQL_ODBC_64
伺服器: localhost / IP
埠: 3306
使用者: root
密碼: ******
資料庫: your_db
字元集: utf8
坑點:SSMA 2008 為 32-bit 程式,**必須配置 32-bit ODBC DSN**,否則連線測試失敗。64-bit DSN 供 64-bit 應用使用。
遷移精靈操作流程
- 啟動 SSMA 2008 for MySQL
- 新建專案 → 目標選 **SQL Server 2008**
- 連線 MySQL:使用剛建立的 32-bit DSN
- 連線 SQL Server 2008:Windows 驗證或 SQL 驗證
- 選擇遷移物件:Schemas → Tables → 轉換結構 (Convert Schema)
- 檢視轉換報告:資料型別對應、自動遞增 → IDENTITY、保留字處理
- 同步至目標:Synchronize with Database
- 遷移資料:Migrate Data → 選擇表 → 開始
- 驗證:SSMS 連線 SQL Server 查看資料庫、資料表、行數
常見問題與解決
| 問題 | 原因 | 解決 |
| SSMA 連線 MySQL 失敗 | 未安裝/配置 32-bit ODBC DSN | 補裝 32-bit 驅動並建立 System DSN |
| 轉換報告大量錯誤 | 型別不支援 (如 MySQL ENUM、SET、BIT、JSON) | 手動調整型別映射:ENUM→VARCHAR+CHECK、BIT→TINYINT |
| 遷移資料極慢/失敗 | 大表無批次、網路延遲、觸發器/約束阻礙 | 停用約束/觸發器、分批遷移、使用 BCP/BULK INSERT |
| 目標資料庫不見遷移結果 | SSMA 連線的 Server 名稱與 SSMS 不同 (本機 vs 實例名) | SSMS 切換正確 Server 實例 (如 .\SQLEXPRESS) |
型別映射參考 (MySQL → SQL Server)
| MySQL | SQL Server | 備註 |
| INT / BIGINT | INT / BIGINT | AUTO_INCREMENT → IDENTITY(1,1) |
| VARCHAR / TEXT | VARCHAR(MAX) / NVARCHAR(MAX) | 建議統一 NVARCHAR 支援 Unicode |
| DATETIME / TIMESTAMP | DATETIME2 / DATETIMEOFFSET | 精度更高、時區感知 |
| DECIMAL(p,s) | DECIMAL(p,s) | 精確數值完美對應 |
| ENUM / SET | VARCHAR + CHECK 约束 | SQL Server 無原生對應 |
| JSON | NVARCHAR(MAX) + ISJSON() | 2016+ 原生 JSON 型別 |
遷移建議: 先跑結構轉換報告,人工審核所有警告;資料遷移前在目標停用 FK/Trigger/Index,遷移完重建;大表用 BCP 工具並行匯出匯入;驗證行數、檢查和、抽樣比對。