首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

從 MySQL 遷移至 Microsoft SQL Server 2000 完整指南

     編輯:MySQL 資料庫相關知識

遷移背景與目標

本白皮書針對需將 MySQL 資料庫遷移至 SQL Server 2000 的開發人員與 DBA,說明工具、資料類型對照、應用程式改造與疑難排解。雖然 SQL Server 2000 已停止支援,但遷移方法論對新版同樣適用。

架構差異速覽

特性MySQL (3.23/4.x)SQL Server 2000
引擎類型MyISAM / InnoDB單一儲存引擎
交易支援InnoDB 支援 ACID完整 ACID
外鍵約束InnoDB 支援完整支援
預存程序/觸發器/檢視表不支援 (舊版)完整支援 (T-SQL)
子查詢4.1 開始支援完整支援
鎖定粒度表鎖 / 行鎖行鎖 / 頁鎖 / 表鎖
複寫單向非同步合併/交易/快照複寫
OLAP/資料探勘無Analysis Services 整合

遷移前置作業

  1. 盤點架構:匯出 SHOW CREATE TABLE、檢視表、觸發器、預存程序、使用者權限。
  2. 備份資料:mysqldump --single-transaction --routines --triggers --all-databases > backup.sql。
  3. 比對資料類型:見下表,特別注意 ENUM/SET、UNSIGNED、TEXT/BLOB 對應。
  4. 保留字衝突:MySQL 允許的識別字可能為 SQL Server 保留字(如 order, group, key),需加 [] 或重新命名。

資料類型對照表

MySQLSQL Server 2000備註
TINYINTTINYINTMySQL 有 UNSIGNED
SMALLINTSMALLINT
MEDIUMINTINTEGERSQL Server 無 MEDIUMINT
INT/INTEGERINT
BIGINTBIGINT
FLOAT/DOUBLEFLOAT/REAL精度對應
DECIMAL(M,D)DECIMAL(M,D)數值精確
DATEDATETIMESQL Server 無純 DATE 型別
TIMEDATETIME同上
DATETIMEDATETIME範圍差異:MySQL 1000-9999,SQL Server 1753-9999
TIMESTAMPDATETIMEMySQL 自動更新
CHAR/VARCHARCHAR/VARCHARSQL Server 8000 字元上限
TEXT/BLOBTEXT/IMAGESQL Server 2005+ 用 VARCHAR(MAX)/VARBINARY(MAX)
ENUM/SETCHAR/VARCHAR + CHECK需自行建立 CHECK 約束
BITBITSQL Server 2000 不支援 BIT

遷移工具與方法

方法一:DTS (Data Transformation Services) - 推薦

  1. 安裝 MySQL ODBC Driver (MyODBC) 於 SQL Server 主機。
  2. 建立系統 DSN 指向 MySQL 來源。
  3. 在 SQL Server Enterprise Manager → DTS 導入/導出精靈,選擇來源為 ODBC DSN,目的為 SQL Server。
  4. 對應資料表、欄位類型,執行封裝。
  5. 可排程定期同步。

方法二:查詢分析器 + 匯入匯出

  • 適用於小資料量、單次遷移。
  • MySQL 匯出 CSV:SELECT * INTO OUTFILE '/tmp/tbl.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' FROM tbl;
  • SQL Server BULK INSERT 或 DTS 導入 CSV。

方法三:第三方工具

  • MySQL Migration Toolkit (官方免費)
  • DBConvert, ESF Database Migration Toolkit 等商業工具。

應用程式改造重點

  1. SQL 方言差異:
    • 字串串接:MySQL CONCAT() / || (SQL_MODE=PIPES_AS_CONCAT) → SQL Server +。
    • 限制筆數:MySQL LIMIT n → SQL Server TOP n / ROW_NUMBER() OVER (2005+)。
    • 自動遞增:MySQL AUTO_INCREMENT → SQL Server IDENTITY(1,1)。
    • 日期函數:NOW() → GETDATE(),DATE_FORMAT → CONVERT/FORMAT。
  2. 連線字串:JDBC/ODBC/ADO.NET 驅動與連線字串全面更新。
  3. 交易控制:MySQL START TRANSACTION → SQL Server BEGIN TRANSACTION。
  4. 大小寫敏感度:MySQL 依檔案系統/協定;SQL Server 依資料庫 Collation (預設不敏感)。

常見遷移問題與對策

問題原因解決
資料截斷VARCHAR 長度不足、CHAR 尾端空白擴大目標欄位長度、使用 RTRIM
日期溢位MySQL 允許 '0000-00-00'、年份 < 1753清洗資料、轉為 NULL 或預設值
自動遞增衝突IDENTITY 插入失敗SET IDENTITY_INSERT tbl ON 手動插入後關閉
編碼亂碼MySQL utf8 vs SQL Server 預設代碼頁統一用 UTF-8/Unicode,ODBC 設定正確代碼頁
外鍵建立失敗父表資料不符、類型不匹配先停用約束、清洗資料、再啟用

驗收與上線檢查清單

  • [ ] 所有資料表筆數、校驗和 (CHECKSUM) 一致。
  • [ ] 關鍵業務查詢結果逐筆比對。
  • [ ] 預存程序/觸發器/檢視表功能測試通過。
  • [ ] 應用程式整合測試 (UAT) 通過。
  • [ ] 效能基準測試達標(索引、統計資訊已更新)。
  • [ ] 備份/還原/高可用架構已部署驗證。

結語

遷移不僅是資料搬移,更是架構重構的契機。善用 SQL Server 的進階功能(預存程序、檢視表、索引檢視、Analysis Services),能將系統推向更高層次。建議分階段遷移、充分測試、保留回滾方案。

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