亂碼本質是編碼不一致。本文從瀏覽器、PHP 文件、MySQL 連接、資料庫/表/欄位四個層級,給出統一 UTF-8(推薦 utf8mb4)的完整配置清單,並針對 PHPMyAdmin、國外空間、舊項目遷移給出專項方案。
原因:PHP 連接 MySQL 未設定字符集,驅動預設 latin1 讀取 UTF-8 數據。
<meta charset="utf-8">CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci。PHPMyAdmin 設定:MySQL 字符集 → utf8mb4,連接校對 → utf8mb4_general_ci,建庫 整理 → utf8mb4_general_ci。
gb2312,Apache 2.4+ 預設 AddDefaultCharset utf-8。utf8mb4,PHP 連接 SET NAMES utf8mb4,HTML charset=utf-8。utf8 實為 utf8mb3,僅支援 BMP 平面(3 字節),不支援 Emoji、生僻字(4 字節)。utf8mb4 真正支援 Unicode 4 字節,CHAR(4) 可存 Emoji。Content-Type: text/html; charset=utf-8header('Content-Type: text/html; charset=utf-8');SHOW VARIABLES LIKE 'character_set%'; 全為 utf8mb4SHOW CREATE TABLE tbl; 含 CHARSET=utf8mb4SELECT HEX(col) FROM tbl; 檢查字節序列