首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

PHP + MySQL 中文亂碼徹底解決:四大層級統一 UTF-8 最佳實踐

     編輯:MySQL 綜合教學

PHP + MySQL 中文亂碼徹底解決:四大層級統一 UTF-8 最佳實踐

亂碼本質是編碼不一致。本文從瀏覽器、PHP 文件、MySQL 連接、資料庫/表/欄位四個層級,給出統一 UTF-8(推薦 utf8mb4)的完整配置清單,並針對 PHPMyAdmin、國外空間、舊項目遷移給出專項方案。

現象 1:PHPMyAdmin 正常,網頁顯示 ????

原因:PHP 連接 MySQL 未設定字符集,驅動預設 latin1 讀取 UTF-8 數據。

解決清單

  1. HTML 頭:<meta charset="utf-8">
  2. PHP 文件保存為 UTF-8 無 BOM(Notepad++/VS Code 右下角轉換)。
  3. 建庫建表指定 CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci。
  4. 連接後立即執行:

現象 2:PHPMyAdmin 導入報錯/亂碼

PHPMyAdmin 設定:MySQL 字符集 → utf8mb4,連接校對 → utf8mb4_general_ci,建庫 整理 → utf8mb4_general_ci。

現象 3:本地正常,國外空間/新版 Apache 導入失敗

  • 國外 MySQL 多不支援 gb2312,Apache 2.4+ 預設 AddDefaultCharset utf-8。
  • 強制全鏈路 UTF-8:重建庫表為 utf8mb4,PHP 連接 SET NAMES utf8mb4,HTML charset=utf-8。

進階:為什麼推薦 utf8mb4 而非 utf8?

  • MySQL utf8 實為 utf8mb3,僅支援 BMP 平面(3 字節),不支援 Emoji、生僻字(4 字節)。
  • utf8mb4 真正支援 Unicode 4 字節,CHAR(4) 可存 Emoji。
  • 5.5.3+ 完全支援,建議全部遷移。

排查清單(由外向內)

  1. 瀏覽器 Network → Response Headers → Content-Type: text/html; charset=utf-8
  2. PHP header('Content-Type: text/html; charset=utf-8');
  3. 連接字符集:SHOW VARIABLES LIKE 'character_set%'; 全為 utf8mb4
  4. 庫/表/欄位:SHOW CREATE TABLE tbl; 含 CHARSET=utf8mb4
  5. 數據本身:SELECT HEX(col) FROM tbl; 檢查字節序列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved