利用 SQL Server DTS (Data Transformation Services) 導出文本文件,再通過 PHPMyAdmin 導入 MySQL,實現無編程異構遷移。
輸出:每張表對應一個文本文件 (CSV/TSV),含列名首行。
SHOW CREATE TABLE 從 SQL Server 獲取 DDL,調整類型後執行),、引號 "、編碼 utf-8、首行列名| 問題 | 原因 | 修復 |
|---|---|---|
| 導入行數少於源 | 文本文件編碼不匹配 / 分隔符衝突 / 引號未轉義 | 統一 UTF-8、用制表符 TSV 避免逗號衝突、檢查雙引號轉義 |
| 日期時間格式錯誤 | SQL Server datetime 導出格式與 MySQL DATETIME 不兼容 | DTS 導出時指定格式 YYYY-MM-DD HH:MM:SS 或 SQL 轉換 CONVERT(VARCHAR, dt, 120) |
| 大文本截斷 | PHPMyAdmin 上傳限制 / MySQL max_allowed_packet | 調整 upload_max_filesize/post_max_size/max_allowed_packet,或分片導入 |
| 主鍵衝突 | 目標表已有數據 / 自增種子衝突 | TRUNCATE TABLE 清空 / ALTER TABLE ... AUTO_INCREMENT=1 |
# 1. DTS 導出 CSV (或用 bcp.exe 高性能導出)
bcp "SELECT * FROM db.dbo.table" queryout table.csv -c -t, -T -S localhost
# 2. MySQL 命令行高速導入
mysql -uroot -p --local-infile=1 -e "
LOAD DATA LOCAL INFILE 'table.csv'
INTO TABLE db.table
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
"
性能提升:LOAD DATA INFILE 比 INSERT 快 10-20 倍,繞過 SQL 解析層。