承接舊專案 SQL Server → MySQL 遷移任務,經調研實測三大主流方案,總結適用場景、效能差異與語法轉換避坑清單,助力平滑遷移。
| 方案 | 工具 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| 1 | SQLyog / Navicat | 圖形化、字段映射靈活、成功率高 | 極慢(百萬行級需數小時)、單線程 | 小數據量(<10萬行)、異構字段映射複雜場景 |
| 2 | PowerDesigner 逆向 + SSMS 腳本導出 | 結構遷移精準、數據導出可控、可並行處理腳本 | 需手動處理 datetime/decimal 類型轉換、腳本體積大 | 中大數據量、需精細控制結構轉換 |
| 3 | MySQL Workbench Migration Wizard | 官方工具、自動類型映射、支援增量同步、速度快 | 需 VIEW ANY DATABASE 權限、30 天試用期 | 大數據量首選、生產級遷移標準方案 |
源端 SQL Server 登入賬號需具備 VIEW ANY DATABASE 權限,否則無法讀取元數據導致遷移失敗:
GRANT VIEW ANY DATABASE TO [migration_user];
-- SQL Server
ISNULL(expr, default_val) -- 兩參數
-- MySQL
IFNULL(expr, default_val) -- 兩參數
COALESCE(expr1, expr2, ...) -- 多參數,標準 SQL 推薦
批量替換腳本中所有 ISNULL → IFNULL 或 COALESCE。
-- SQL Server (2012+)
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY c.choise_time DESC) AS rowid, ...
FROM ...
) tt WHERE rowid BETWEEN @minRow AND @maxRow;
-- MySQL
SELECT ... FROM ... ORDER BY c.choise_time DESC LIMIT @minRow, @maxRow;
ORM 框架(iBatis/MyBatis)需同步更新映射 XML 中的分頁片段。
| SQL Server | MySQL 推薦 | 備註 |
|---|---|---|
| DATETIME / DATETIME2 | DATETIME(6) / TIMESTAMP(6) | 精度對齊,注意時區 |
| DATE | DATE | 兼容 |
| DECIMAL(p,s) | DECIMAL(p,s) | 精度範圍一致 |
| UNIQUEIDENTIFIER | CHAR(36) / BINARY(16) | UUID 存儲 |
| BIT | TINYINT(1) / BIT(1) | MySQL BIT 位運算不同 |