將 SQL Server 資料庫遷移至 MySQL,主要面臨結構轉換、數據匯出入、字元集處理三大挑戰。本文提供兩種主流方案完整操作步驟。
使用 SSMS 或腳本產生 CREATE TABLE 陳述式,手動調整語法差異(如 IDENTITY → AUTO_INCREMENT、NVARCHAR → VARCHAR、移除方括號 []、預設值語法調整),在 MySQL 執行建立表結構。
bcp "SELECT * FROM DBName.dbo.TableName" queryout TableName.txt ^
-c -T -S localhost\SQL2005
-c:字元模式,欄位以 Tab 分隔,列以換行分隔。-T:信任連線(Windows 驗證),或用 -U sa -P password。-S:指定伺服器\實例名。mysqlimport -u root -p DatabaseName /path/to/TableName.txt
前置需求: 安裝 Java JRE、MySQL JDBC Driver (Connector/J)、SQL Server JDBC Driver (jTDS)。
jdbc:jtds:sqlserver://IP:1433/DBName;user=USER;password=PASS;charset=gb2312
jdbc:mysql://IP:3306/?user=USER&password=PASS&useServerPrepStmts=false&characterEncoding=gbk
charset=gb2312, collation=gb2312_chinese_ci。SET NAMES gbk; 確認中文正常。| 問題 | 原因 | 解決 |
|---|---|---|
| 中文亂碼 | 字元集不匹配 | 來源/目標 JDBC 字串均指定 charset=gb2312/gbk;MySQL 端 SET NAMES gbk |
| 自增欄位遺失 | IDENTITY 不轉 AUTO_INCREMENT | 手動修正結構腳本或 Toolkit 映射規則 |
| 日期時間型別錯誤 | DATETIME vs TIMESTAMP | 對應修正為 DATETIME |
| 大數據量匯入極慢 | mysqlimport 預設逐行提交 | 使用 LOAD DATA INFILE 並關閉索引/外鍵檢查 |