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

MySQL 資料遷移至 SQL Server 兩大方案實戰

     編輯:MySQL 資料庫相關知識

方案一:SQL 腳本轉換(適合中小資料量)

流程

  1. MySQL 工具匯出 SQL(如 SQLyog)
  2. 程式處理語法差異
  3. SQL Server 執行腳本

關鍵轉換點(Java 範例)

public void convertSqlFile(File file) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
    String outPath = file.getAbsolutePath().replace(".", "_converted.");
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPath), "utf-8"));

    String line;
    while ((line = br.readLine()) != null) {
        // 跳過 MySQL 專用指令
        if (line.contains("CREATE DATABASE") || line.contains("USE `")) continue;

        // 移除反引號
        if (line.toLowerCase().contains(") values(")) {
            int idx = line.toLowerCase().indexOf("values(");
            String prefix = line.substring(0, idx).replace("`", "");
            line = prefix + line.substring(idx);
        }

        bw.write(line + "\r\n");
    }
    br.close(); bw.close();
}

大表分批匯入

  • 單表 > 1000 行建議拆分為多行 INSERT,避免 SQL Server 解析器堆疊溢位
  • 或使用 sqlcmd -i file.sql 批次執行

方案二:ODBC 異構遷移(大數據量/生產環境)

  1. 安裝 MySQL ODBC Driver (Connector/ODBC)
  2. 配置 System DSN 指向 MySQL 來源
  3. SQL Server 建立 Linked Server 或使用 SSIS 匯入導出精靈
  4. 對應欄位類型轉換,啟用批次提交

詳細步驟待補充...

MySQL → SQL Server 2008 相容性清單

項目MySQLSQL Server 2008處理方式
外鍵約束ON DELETE RESTRICT不支援移除或改用觸發器
建表判斷DROP TABLE IF EXISTS不支援改用 IF OBJECT_ID() IS NOT NULL DROP TABLE
BLOB 類型BLOB/TEXTIMAGE/TEXT/NTEXT類型映射轉換
自增AUTO_INCREMENTIDENTITY(1,1)語法轉換
字符集CHARSET=utf8COLLATE Chinese_PRC_CI_AS指定校對規則

最佳實踐建議

  • 約束條件放最後建立,避免匯入資料時阻塞
  • 使用表級約束而非欄位級,便於管理
  • 大量資料先 BULK INSERT 或 bcp,再建索引/約束
  • 驗證行數、檢查和、關鍵欄位抽樣比對
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved