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

MySQL 字元集完整配置指南:徹底解決 UTF-8 亂碼問題

     編輯:MySQL 綜合教學

MySQL 字元集配置:從伺服器到連線的完整鏈路

字元集不一致是導致中文亂碼的主因。MySQL 涉及 7 個字元集系統變數,任一環節錯誤即會產生亂碼。本文提供完整配置清單與驗證步驟。

核心字元集變數說明

變數用途建議值
character_set_server伺服器預設字元集utf8mb4
character_set_database資料庫預設字元集utf8mb4
character_set_client客戶端送出資料的字元集utf8mb4
character_set_connection連線層轉換目標字元集utf8mb4
character_set_results伺服器回傳結果的字元集utf8mb4
collation_server伺服器預設校對規則utf8mb4_unicode_ci
collation_database資料庫預設校對規則utf8mb4_unicode_ci
collation_connection連線層校對規則utf8mb4_unicode_ci

關鍵區別: utf8mb4 支援完整 Unicode (含 Emoji、生僻字),utf8 僅支援 BMP 平面 (3 位元組),新專案務必使用 utf8mb4。

配置檔設定 (my.cnf / my.ini)

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

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

Windows 需將 my.ini 複製至 C:\Windows\ 或 MySQL 安裝目錄。

驗證配置生效

mysql> SHOW VARIABLES LIKE 'character_set_%';
mysql> SHOW VARIABLES LIKE 'collation_%';

所有 character_set_* 應顯示 utf8mb4,所有 collation_* 應顯示 utf8mb4_unicode_ci。

資料庫與資料表層級指定

-- 建庫指定
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 建表指定 (ENGINE 建議 InnoDB)
CREATE TABLE t_user (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 修改既有表
ALTER TABLE t_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

應用程式連線設定

語言/驅動設定方式
JDBCjdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false
PHP PDOnew PDO("mysql:host=...;dbname=...;charset=utf8mb4", $user, $pass)
Python (PyMySQL)charset='utf8mb4' 參數
Go (go-sql-driver/mysql)dsn := "user:pass@tcp(host:3306)/db?charset=utf8mb4&parseTime=True"
Node.js (mysql2)charset: 'utf8mb4' 選項

常見亂碼場景診斷

  1. 雙重編碼: 資料以 latin1 寫入但實為 utf8 → CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8mb4) 修復
  2. 連線未設定: 應用層未指定 charset → 補上連線參數
  3. 舊版 utf8 截斷: 4 位元組字元存入 utf8 欄位 → 改用 utf8mb4 欄位
  4. SET NAMES utf8mb4 效果等同同時設定 client、connection、results 三個變數,但不持久化,需寫入配置檔或 init_connect。

統一全鏈路 utf8mb4 是解決中文亂碼的根本之道。建議將配置檔模板化納入專案規範,新環境部署即套用。

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