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

將 SQL Server 資料遷移至 MySQL:PHP 腳本法避開型別陷阱

     編輯:MySQL 資料庫相關知識

SQL Server 遷移 MySQL 兩大路徑:ODBC 直連(簡單但型別不匹配風險高)、PHP 腳本遷移(彈性強、可控型別轉換)。本文採後者。

前置條件

  • PHP 環境已啟用 mssql(或 sqlsrv)與 mysqli 擴展。
  • MySQL 已建立目標資料庫 shop_book 與資料表 book(結構對應來源)。

遷移邏輯

  1. 同步連線 SQL Server(table_book)與 MySQL(shop_book)。
  2. 從 SQL Server 讀取來源表 book 全部資料。
  3. 迴圈逐筆寫入 MySQL 目標表,若遇型別不符(如 ntext、image)在 PHP 端轉換。

完整 PHP 範例

<?php
// 1. 連線 SQL Server
$ms_conn = mssql_connect('localhost', 'sa', '');
mssql_select_db('table_book', $ms_conn);

// 2. 連線 MySQL
$my_conn = mysqli_connect('localhost', 'root', 'root', 'shop_book');
mysqli_set_charset($my_conn, 'utf8mb4');

// 3. 查詢來源資料
$ms_rs = mssql_query('SELECT * FROM book', $ms_conn);

// 4. 迴圈寫入目標
while ($row = mssql_fetch_assoc($ms_rs)) {
    $name = $row['name'];
    $author = $row['author'];
    $bookconcern = $row['bookconcern'];

    // 若有型別問題,在此處理,如:
    // $desc = mb_convert_encoding($row['ntext_col'], 'UTF-8', 'UCS-2LE');

    $sql = "INSERT INTO book (name, author, bookconcern) 
            VALUES (?, ?, ?)";
    $stmt = mysqli_prepare($my_conn, $sql);
    mysqli_stmt_bind_param($stmt, 'sss', $name, $author, $bookconcern);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
}

echo "遷移完成";
?>

關鍵優勢

  • 型別掌控:PHP 端可針對 ntext→TEXT、image→BLOB、日期格式轉換等逐一處理。
  • 錯誤可視:每筆寫入可記錄成功/失敗,便於事後核對。
  • 無 ODBC 驅動相依:避免驅動版本、DSN 設定等環境問題。

擴充建議

  • 大量資料建議使用 mysqli_multi_query 批次插入或 LOAD DATA 暫存檔方式提升效能。
  • 加入交易控制:每 N 筆 COMMIT 一次,失敗可 ROLLBACK。
  • 記錄遷移日誌(來源 PK、目標 PK、時間戳)供稽核。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved