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

解決 MySQL 5 中文亂碼問題:字元集統一配置全攻略

     編輯:MySQL 資料庫相關知識

亂碼根因

MySQL 涉及四層字元集:

  1. 資料庫/表/欄位定義字元集
  2. 連線字元集(Client ↔ Server)
  3. 應用程式/腳本檔案編碼
  4. 瀏覽器/終端顯示編碼

任一層不一致即產生亂碼。核心原則:**全鏈路統一為 utf8mb4**。

完整配置清單

1. MySQL 服務端 /etc/my.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake  # 強制忽略客戶端請求的字元集

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

2. 建庫建表顯式指定

CREATE DATABASE `mydb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

CREATE TABLE `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

3. 連線層設定(關鍵)

語言/驅動設定方式
PHP (mysqli)$mysqli->set_charset('utf8mb4');
PHP (PDO)new PDO('mysql:host=...;charset=utf8mb4', ...)
Python (PyMySQL)charset='utf8mb4' 參數
Java (JDBC)?characterEncoding=utf8mb4 或 connectionInitSql=SET NAMES utf8mb4
Go (go-sql-driver/mysql)charset=utf8mb4,utf8 DSN 參數
Node.js (mysql2)charset: 'utf8mb4' 選項

4. 檔案與終端編碼

  • PHP/HTML/JS/CSS 檔案儲存為 **UTF-8 無 BOM**。
  • HTML 頁面:<meta charset="utf-8">
  • 終端/SSH 客戶端編碼設為 UTF-8。

驗證指令

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 期望輸出:
-- character_set_server: utf8mb4
-- character_set_database: utf8mb4
-- character_set_connection: utf8mb4
-- character_set_client: utf8mb4
-- character_set_results: utf8mb4
-- collation_server: utf8mb4_general_ci

常見坑點

utf8 vs utf8mb4
MySQL utf8 實為 utf8mb3(最多 3 位元組),**不支援 Emoji、生僻字**。**必須用 utf8mb4**。
舊資料已是 latin1 存中文
需「雙重轉碼」修復:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4; 或導出 SQL 檔手工替換 CHARSET=latin1 → utf8mb4 後重導入。
phpMyAdmin 顯示正常但應用亂碼
phpMyAdmin 自動偵測連線字元集,應用未設定 SET NAMES。

結語

MySQL 中文亂碼本質是**字元集不一致**。以 utf8mb4 為唯一標準,從 my.cnf、建表、連線驅動、檔案編碼、前端頁面**全鏈路統一**,並用 SHOW VARIABLES 驗證,即可徹底根治。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved