首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MSSQL 遷移 MySQL 實戰指南:結構匯出與 BCP 大量資料轉移

     編輯:MySQL 綜合教學

遷移兩階段策略

  1. 結構遷移: 產生 CREATE TABLE 腳本 → 語法調適 → MySQL 執行建表
  2. 資料遷移: MSSQL BCP 匯出文字檔 → MySQL mysqlimport 大量匯入

階段一:結構遷移

1. MSSQL 產生建表腳本

  • SSMS → 右鍵資料庫 → Tasks → Generate Scripts
  • 選擇 "Schema only"、目標版本、檔案輸出

2. 關鍵語法差異對照表

MSSQLMySQL說明
IDENTITY(1,1)AUTO_INCREMENT自動遞增主鍵
DATETIMEDATETIME / TIMESTAMP時間精度與範圍不同
NVARCHAR(MAX)LONGTEXT / JSON大型 Unicode 文字
UNIQUEIDENTIFIERCHAR(36) / BINARY(16)GUID 儲存
GETDATE()NOW() / CURRENT_TIMESTAMP當前時間
ISNULL(expr, val)IFNULL(expr, val) / COALESCENULL 替換
TOP nLIMIT n限制筆數
[] 識別符` ` 反引號保留字逸出

3. 自動化調適建議

使用 MySQL Workbench Migration Wizard 或開源工具 sqlines 批次轉換,再人工複核關鍵物件 (索引、外鍵、觸發器、預存程序)。

階段二:資料遷移 (BCP + mysqlimport)

1. MSSQL 端:BCP 匯出

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:認證

2. MySQL 端:mysqlimport 匯入

mysqlimport -u root -p --fields-terminated-by=, --lines-terminated-by=\n --local dbname /path/to/tablename.txt

關鍵對應: 檔名必須與資料表名相同 (如 tablename.txt → tablename 表)。

3. 大量資料優化技巧

  • 匯入前 SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;
  • 使用 LOAD DATA INFILE 替代 mysqlimport 可更精細控制
  • 分批次匯入,每批 10-50 萬行,監控 SHOW PROCESSLIST
  • 匯入後重建索引:ALTER 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-8BCP 加 -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,包含結構比對、資料核對、效能基準測試,確保零差異上線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved