前言
異構資料庫遷移常讓開發者頭痛。本文介紹一種零程式碼、純圖形介面的遷移路徑:SQL Server Enterprise Manager + DTS(Data Transformation Services)匯出文字檔 → phpMyAdmin 匯入 MySQL,適合中小資料量、一次性遷移場景。
前置條件
- 已安裝 SQL Server Client Tools(Enterprise Manager)。
- 已部署 phpMyAdmin 並可正常管理目標 MySQL。
- 網路互通:客戶端能連線 SQL Server 與 MySQL。
階段一:SQL Server DTS 匯出文字檔
- 開啟 Enterprise Manager → 註冊/連線目標 SQL Server。
- 展開 Data Transformation Services → 右鍵 New Package。
- DTS 設計面:Connection 選擇來源資料庫(Microsoft OLE DB Provider for SQL Server),設定認證。
- 目的地選擇 Text File (Destination),指定輸出資料夾與檔名(如
export.txt)。
- 新增任務 → Transform Data Task,連接來源與目的地圖示。
- 任務屬性定義:Source 選資料表/檢視表,Destination 對應文字檔欄位,Transformations 做型別對應(必要時)。
- 執行封裝 → 提示成功 → Save Package。
- 右鍵封裝 → Export Data → 精靈選擇 Copy tables and views from source database → 完成,資料已寫入文字檔。
階段二:phpMyAdmin 匯入 MySQL
情境 A:目標表尚不存在(結構同步)
- phpMyAdmin 建立新資料表,欄位型別、長度、編碼與來源完全一致。
- 進入該表 → Import 標籤 → 選擇文字檔 → 格式 CSV 或 CSV using LOAD DATA。
- 關鍵設定:
- Fields terminated by:
\t(DTS 預設 Tab 分隔)
- Fields enclosed by:
"
- Fields escaped by:
\
- Lines terminated by:
\n
- Ignore first line: 否(DTS 不產生標題列)
- 點擊 Go → 匯入完成,瀏覽資料驗證。
情境 B:目標表已存在但結構/欄位名不同
- 建立暫存表,結構與文字檔完全對應,按情境 A 匯入資料。
- phpMyAdmin 對暫存表 → Export → 格式 SQL → 勾選 Data + Structure → 下載
temp.sql。
- 用文字編輯器開啟
temp.sql,批次取代:
- 表名:
temp_table → target_table
- 欄位名:
src_col1 → dst_col1 …
- 在目標資料庫執行修改後的 SQL 腳本,資料遷移完成。
常見錯誤與排查
| 現象 | 可能原因 | 對策 |
| 匯入 0 筆 | 分隔符/跳過首列設定錯誤 | 用 Notepad++ 檢視原始檔前幾行,核對 phpMyAdmin 設定 |
| 資料截斷/亂碼 | 字元集不匹配 | 確認 SQL Server 導出編碼、MySQL 表 CHARSET、phpMyAdmin 連線編碼三者一致(建議全鏈路 UTF-8) |
| 主鍵衝突 | 目標表已有資料 | 先 TRUNCATE 或調整匯入模式(INSERT IGNORE/REPLACE) |
| 大數值溢位 | 型別不匹配 | 暫存表欄位用 BIGINT/TEXT 承接,再轉型 |
進階替代方案(大數據量/生產環境)
- SSIS (SQL Server Integration Services): DTS 後繼者,效能更強、支援並行、錯誤處理豐富。
- MySQL Workbench Migration Wizard: 官方異構遷移工具,支援 Schema 對應、資料類型轉換、增量同步。
- ETL 工具: Talend、Kettle (Pentaho)、Airbyte,適合定期同步、複雜轉換。
- CDC 工具: Debezium + Kafka Connect,實現即時異構同步。
結語
DTS + phpMyAdmin 雖屬「古典組合」,但零授權成本、操作視覺化、無需寫代碼,對於百萬筆以內、一次性遷移專案極具性價比。關鍵在於分隔符對齊、編碼統一、暫存表過渡三步走。大數據量或常態化同步請升級至 SSIS/Workbench/CDC 生態。