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

MySQL 編碼轉換遷移實戰:從 latin1 到 UTF-8 的完整指南

     編輯:MySQL 資料庫相關知識

背景與痛點

為支援 WordPress 多語言內容,需將資料庫預設編碼從 latin1 遷移至 utf8。本文記錄完整遷移流程,包含備份、編碼替換、新庫建立、程式碼修正與跨版本遷移(MySQL 4.0 → 5.0)亂碼排查。

階段一:本地編碼轉換流程

  1. 備份原資料庫: 使用 phpMyAdmin 匯出 sh18_blog 資料庫。
  2. 批次替換編碼宣告: 用 EditPlus 開啟 SQL 檔,將 DEFAULT CHARSET=latin1 全部替換為 DEFAULT CHARSET=utf8。
  3. 建立 UTF-8 新資料庫:
    • phpMyAdmin → Operations → Collation 選 utf8_general_ci。
    • 主頁面將 MySQL connection collation 設為 utf8_general_ci(預防連線編碼不匹配)。
  4. 修改 WordPress 核心連線設定: 編輯 wp-includes/wp-db.php,在 $this->select($dbname); 前插入:
    $this->query("SET NAMES 'utf8'");
    注意:複製代碼時需修正智慧引號、全形字元,否則會報語法錯誤。
  5. 更新 wp-config.php 資料庫連線參數 指向新庫。
  6. 後台修正分類名稱: 匯入後若分類顯示 ??,進後台重新編輯儲存即可修正。

階段二:跨伺服器遷移與 MySQL 版本升級亂碼排查

遷移步驟

  1. 舊伺服器 phpMyAdmin 匯出(勾選 gzip 壓縮)。
  2. 新伺服器 phpMyAdmin:刪除現有表結構 → SQL 分頁匯入備份檔。
  3. 大檔案匯入失敗對策: 遭遇 Memory limit 或 30秒超時,將備份拆分為多個表單檔案分批匯入。
  4. 修正站內連結:編輯 wp_options 表,將 siteurl 與 home 更新為新域名。

MySQL 4.0 → 5.0 亂碼根因與解決

現象:側邊欄手寫中文正常,其餘全變 ?。經查證,MySQL 4.1+ 引入字元集機制,舊版 latin1 存儲的中文實為雙字節偽裝,升級後伺服器嘗試按 UTF-8 解讀導致錯位。

解決方案(參考桑林志):

  1. 執行 SQL 強制指定資料庫字元集:
    ALTER DATABASE myblog CHARACTER SET utf8;
  2. phpMyAdmin Operations 頁面將 Collation 設為 utf8_general_ci。
  3. 再次確認 wp-db.php 已加入 SET NAMES 'utf8'。

重新整理網站,中文完美顯示。全程耗時約 6 小時,核心耗時在查找跨版本編碼機制差異與 phpMyAdmin 權限受限(無法直接修改 Collation)的繞坑上。

關鍵經驗總結

  • 遷移前務必確認來源與目標 MySQL 版本,跨大版本需處理字元集轉換。
  • 備份檔案分批匯入可有效規避 PHP 執行時間與記憶體限制。
  • 應用層(SET NAMES)、資料庫層(CHARACTER SET)、連線層(Collation)三層編碼必須一致。
  • phpMyAdmin 權限不足時,可透過 SQL 指令 ALTER DATABASE 直接修改資料庫屬性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved