為支援 WordPress 多語言內容,需將資料庫預設編碼從 latin1 遷移至 utf8。本文記錄完整遷移流程,包含備份、編碼替換、新庫建立、程式碼修正與跨版本遷移(MySQL 4.0 → 5.0)亂碼排查。
sh18_blog 資料庫。DEFAULT CHARSET=latin1 全部替換為 DEFAULT CHARSET=utf8。utf8_general_ci。MySQL connection collation 設為 utf8_general_ci(預防連線編碼不匹配)。wp-includes/wp-db.php,在 $this->select($dbname); 前插入:
$this->query("SET NAMES 'utf8'");
注意:複製代碼時需修正智慧引號、全形字元,否則會報語法錯誤。
wp-config.php 資料庫連線參數 指向新庫。??,進後台重新編輯儲存即可修正。Memory limit 或 30秒超時,將備份拆分為多個表單檔案分批匯入。wp_options 表,將 siteurl 與 home 更新為新域名。現象:側邊欄手寫中文正常,其餘全變 ?。經查證,MySQL 4.1+ 引入字元集機制,舊版 latin1 存儲的中文實為雙字節偽裝,升級後伺服器嘗試按 UTF-8 解讀導致錯位。
解決方案(參考桑林志):
ALTER DATABASE myblog CHARACTER SET utf8;
utf8_general_ci。wp-db.php 已加入 SET NAMES 'utf8'。重新整理網站,中文完美顯示。全程耗時約 6 小時,核心耗時在查找跨版本編碼機制差異與 phpMyAdmin 權限受限(無法直接修改 Collation)的繞坑上。
SET NAMES)、資料庫層(CHARACTER SET)、連線層(Collation)三層編碼必須一致。ALTER DATABASE 直接修改資料庫屬性。