利用 MySQL ODBC 驅動 + SQL Server DTS (Data Transformation Services) 實現異構數據庫雙向可視化遷移,無需編寫代碼。
MySQL_TargetMySQL_Target反向操作:DTS 導入向導,數據源選 MySQL ODBC DSN,目標選 SQL Server OLE DB Provider,其餘步驟對稱。
| 錯誤現象 | 根因 | 修復方案 |
|---|---|---|
| 表遷移失敗 | 數據類型不匹配 (如 SQL Server UNIQUEIDENTIFIER、SQL_VARIANT、GEOGRAPHY 等 MySQL 無對應類型) | 預先在目標庫手建表,調整類型映射 (GUID→CHAR(36)、幾何→JSON/TEXT),再遷移數據 |
| 長文本截斷 | VARCHAR(MAX)/TEXT 超過 MySQL VARCHAR(65535) 或默認 TEXT 限制 | 目標表用 LONGTEXT/MEDIUMTEXT,或分片存儲 |
| 自增衝突 | 源表 IDENTITY 列導入後自增種子重置 | 導入後執行 ALTER TABLE t AUTO_INCREMENT = max_id+1 |
| 字符集亂碼 | DSN 未指定字符集 / 目標表非 utf8mb4 | DSN 勾選 charset=utf8mb4,目標表 CHARSET=utf8mb4 |
| 大數據量超時 | DTS 默認事務/批次設置不當 | 調整 Commit Size/Batch Size,或改用 mysqldump + BULK INSERT 批量導入 |
# 1. MySQL 導出 (單事務、含建表)
mysqldump -h src -u user -p --single-transaction --routines --triggers db > dump.sql
# 2. SQL Server 批量導入 (BCP 或 BULK INSERT)
# 需預建表結構,調整字段映射
BULK INSERT dbo.target_table FROM 'dump.csv' WITH (FIELDTERMINATOR=',', ROWTERMINATOR='\n', FIRSTROW=2);