萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Access 轉 MySQL 完整遷移腳本:PHP + COM 實作範例

遷移架構概覽

本方案採用 PHP 腳本,透過 COM 組件讀取 Access (.mdb),逐筆寫入 MySQL,解決編碼與欄位型別對應問題。

三階段實作碼

階段一:連接 MySQL

<?php
$dbhost     = "localhost:3307";
$dbname     = "dataname";
$dbuser     = "root";
$dbpass     = "*******";
$table_pre  = "sdb_";

$link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$link) die("連線失敗: " . mysqli_connect_error());

mysqli_set_charset($link, "utf8mb4");
?>

註:原碼使用已棄用的 mysql_* 函數,此處升級為 mysqli 並採用 utf8mb4。

階段二:連接 Access (COM)

<?php
$mdb_path = realpath("data.mdb");
$conn_str = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$mdb_path";

$conn = new COM("ADODB.Connection");
$conn->Open($conn_str);

$rs = new COM("ADODB.RecordSet");
$rs->Open("SELECT * FROM information WHERE lanmu3id = 13", $conn, 1, 1);
?>

階段三:逐筆讀取與寫入

<?php
while (!$rs->EOF) {
    // 編碼轉換:Access 通常為 GB2312/Big5,MySQL 存 UTF-8
    $id      = iconv('gb2312', 'utf-8', $rs->Fields('ID')->value);
    $title   = iconv('gb2312', 'utf-8', $rs->Fields('title')->value);
    $summary = iconv('gb2312', 'utf-8', $rs->Fields(1)->value);
    $content = iconv('gb2312', 'utf-8', $rs->Fields('content')->value);
    $download= iconv('gb2312', 'utf-8', $rs->Fields('download')->value);

    echo "<font color=red>$title</font> 已匯入<br>";

    $sql = "INSERT INTO `shopex`.`{$table_pre}articles`
            (`article_id`,`node_id`,`title`,`content`,`uptime`,`ifpub`,`align`,`filetype`,`filename`,`orderlist`,`disabled`)
            VALUES (NULL, '{$fenlei}', '$title', '$content', UNIX_TIMESTAMP(), 1, NULL, NULL, NULL, NULL, 'false')";

    mysqli_query($link, $sql) or die("寫入失敗: " . mysqli_error($link));

    $rs->MoveNext();
}
?>

關鍵避坑指南

  • 編碼轉換:Access 常為 ANSI (GB2312/Big5),必須 iconv 轉 UTF-8,否則中文亂碼。
  • 欄位對應:Access 欄位名可用名稱或索引 (0-based) 存取,建議統一用名稱。
  • 大量資料:建議批次 INSERT 或改用 LOAD DATA INFILE,效能提升數十倍。
  • 錯誤處理:正式環境請加入交易控制與詳細日誌。
copyright © 萬盛學電腦網 all rights reserved