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

MSSQL 遷移 MySQL 實戰:CSV 導出導入大法(含編碼避坑指南)

     編輯:MySQL 綜合教學

遷移背景與方案選型

ASP/MSSQL → PHP/MySQL 架構遷移,核心挑戰是數據遷移。常見方案對比:

方案優點缺點適用場景
myODBC 直連直觀、圖形化驅動版本地獄、MSSQL 2005+ 常失敗小數據量、環境單純
MSSQL→Access→MySQL中轉通用雙重轉換易亂碼、Access 2GB 限制中小數據、臨時遷移
自寫程序 (PHP/Python)完全可控開發耗時、效能受限於單線程複雜轉換邏輯、增量同步
CSV + LOAD DATAMySQL 原生、高效、並行可控需處理編碼、分隔符、大文件上傳大數據量、生產遷移首選

標準化遷移流程(5 步走)

步驟 1:MSSQL 導出 CSV(關鍵設置)

  • 編碼:**Unicode (UTF-16LE)** 或 **UTF-8**(視導入工具支援度)
  • 文本限定符:**雙引號 (")** — 防止欄位內逗號/換行破壞結構
  • 無表頭、無空行
  • 大表分檔導出(建議單檔 < 500MB)

步驟 2:生成並轉換建表語句

-- MSSQL 生成腳本:右鍵資料庫 → 任務 → 生成腳本
-- 批量替換規則(使用 UE/EditPlus/VS Code 正則):
-- 類型映射:NVARCHAR→VARCHAR, DATETIME→DATETIME, INT→INT, BIT→TINYINT(1)
-- 移除:方括號 [], COLLATE 子句, IDENTITY(1,1)→AUTO_INCREMENT
-- 統一字符集:CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
-- 引擎:ENGINE=InnoDB

步驟 3:MySQL 建表

-- 推薦使用 phpMyAdmin 或 mysql 命令列
mysql -uroot -p db_name < create_tables.sql

-- 或分批執行,觀察報錯調整

步驟 4:CSV 編碼轉換與清洗

  • **必須轉為 UTF-8 (無 BOM)** — MySQL LOAD DATA 預期 UTF-8
  • 工具:UE Studio、Notepad++、iconv -f UTF-16LE -t UTF-8 input.csv > output.csv
  • 檢查:行數一致、無截斷、特殊字元正常

步驟 5:phpMyAdmin 導入 / 命令列導入

方式 A:phpMyAdmin 介面導入

  • 格式:CSV using LOAD DATA
  • 欄位分隔符:,
  • 欄位包圍符:"
  • 跳過第一行:否(無表頭)

方式 B:命令列導入(大文件首選,繞過 PHP 上傳限制)

LOAD DATA INFILE '/path/to/table.csv'
INTO TABLE `table_name`
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 0 LINES;

⚠️ 關鍵避坑指南

1. PHP 上傳大小限制

; php.ini
upload_max_filesize = 500M
post_max_size = 500M
memory_limit = 1024M
max_execution_time = 3600
max_input_time = 3600

或直接用命令列 LOAD DATA INFILE 繞過 PHP。

2. 編碼地獄完整對策

  • **源頭**:MSSQL 導出時選 Unicode/UTF-8
  • **中轉**:CSV 強制轉 UTF-8 無 BOM
  • **目標**:MySQL 資料庫/表/欄位全鏈路 utf8mb4
  • **連接**:應用層連接字串加 charset=utf8mb4

3. 數據類型陷阱

MSSQLMySQL 建議注意
NVARCHAR(N)VARCHAR(N*2) 或 TEXTUnicode 佔 2 字節
DATETIMEDATETIME(3)精度毫秒級
BITTINYINT(1)MySQL 無 BIT 邏輯類型
MONEYDECIMAL(19,4)精確貨幣計算
UNIQUEIDENTIFIERCHAR(36)UUID 字串存儲

4. 外鍵與約束處理

-- 導入前暫時關閉
SET FOREIGN_KEY_CHECKS=0;
SET UNIQUE_CHECKS=0;
SET AUTOCOMMIT=0;

-- 導入後重新開啟並驗證
SET FOREIGN_KEY_CHECKS=1;
SET UNIQUE_CHECKS=1;
COMMIT;

遷移驗證清單

  1. 行數核對:SELECT COUNT(*) FROM src_table vs SELECT COUNT(*) FROM dst_table
  2. 抽樣比對:關鍵業務欄位隨機抽樣 100 行人工核對
  3. 邊界值:NULL、空字串、最大/最小值、特殊字元
  4. 應用端測試:實際跑業務流程、報表、查詢介面

CSV + LOAD DATA 是 MySQL 原生、最高效的批量導入路徑。掌握編碼控制、類型映射、大文件處理三大核心,百萬級甚至億級表遷移也能從容應對。

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