SQL Server 遷移 MySQL 兩大路徑:ODBC 直連(簡單但型別不匹配風險高)、PHP 腳本遷移(彈性強、可控型別轉換)。本文採後者。
mssql(或 sqlsrv)與 mysqli 擴展。shop_book 與資料表 book(結構對應來源)。table_book)與 MySQL(shop_book)。book 全部資料。ntext、image)在 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 "遷移完成";
?>
ntext→TEXT、image→BLOB、日期格式轉換等逐一處理。mysqli_multi_query 批次插入或 LOAD DATA 暫存檔方式提升效能。COMMIT 一次,失敗可 ROLLBACK。