mysqlimport 大量匯入| MSSQL | MySQL | 說明 |
|---|---|---|
| IDENTITY(1,1) | AUTO_INCREMENT | 自動遞增主鍵 |
| DATETIME | DATETIME / TIMESTAMP | 時間精度與範圍不同 |
| NVARCHAR(MAX) | LONGTEXT / JSON | 大型 Unicode 文字 |
| UNIQUEIDENTIFIER | CHAR(36) / BINARY(16) | GUID 儲存 |
| GETDATE() | NOW() / CURRENT_TIMESTAMP | 當前時間 |
| ISNULL(expr, val) | IFNULL(expr, val) / COALESCE | NULL 替換 |
| TOP n | LIMIT n | 限制筆數 |
| [] 識別符 | ` ` 反引號 | 保留字逸出 |
使用 MySQL Workbench Migration Wizard 或開源工具 sqlines 批次轉換,再人工複核關鍵物件 (索引、外鍵、觸發器、預存程序)。
bcp "SELECT * FROM dbname.dbo.tablename" queryout tablename.txt -c -t, -r\n -S localhost\INSTANCE -U sa -P password
參數解析:
-c:字元模式 (預設 tab 分欄、換行分列)-t,:指定欄位分隔符為逗號-r\n:指定列分隔符為 LF-S:伺服器/實例名-U/-P:認證mysqlimport -u root -p --fields-terminated-by=, --lines-terminated-by=\n --local dbname /path/to/tablename.txt
關鍵對應: 檔名必須與資料表名相同 (如 tablename.txt → tablename 表)。
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;LOAD DATA INFILE 替代 mysqlimport 可更精細控制SHOW PROCESSLISTALTER TABLE tbl DISABLE KEYS; ... ENABLE KEYS; (MyISAM)-- 筆數核對 SELECT COUNT(*) FROM mssql_db.tbl; SELECT COUNT(*) FROM mysql_db.tbl; -- 抽樣比對 SELECT * FROM mssql_db.tbl TABLESAMPLE (10 ROWS); SELECT * FROM mysql_db.tbl ORDER BY RAND() LIMIT 10; -- 檢查條件約束 SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='tbl';
| 問題 | 原因 | 解決 |
|---|---|---|
| 編碼亂碼 | MSSQL 預設 UTF-16LE、MySQL UTF-8 | BCP 加 -C 65001 (UTF-8)、確認 MySQL character_set_client |
| 日期格式錯誤 | MSSQL yyyy-MM-dd HH:mm:ss.fff | 匯出前 CONVERT(VARCHAR, col, 120) 標準化 |
| BIT/BOOL 值異常 | MSSQL BIT、MySQL TINYINT(1) | 匯出腳本 CAST(bit_col AS INT) |
| NULL vs 空字串 | MSSQL 區分、MySQL 易混淆 | BCP -k 保留 NULL、匯入指定 --fields-optionally-enclosed-by |
MSSQL → MySQL 遷移核心在於結構語法精準映射與大量資料高效傳輸。善用 BCP/mysqlimport 組合可達到 GB 級/小時匯入速度。建議建立自動化遷移 Pipeline,包含結構比對、資料核對、效能基準測試,確保零差異上線。