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

徹底解決 MySQL 亂碼問題:字元集一致性最佳實踐

     編輯:MySQL 資料庫相關知識

核心原則

亂碼根因在於「寫入時的客戶端字元集」與「讀取時的客戶端字元集」不一致。資料庫本身的字元集僅影響儲存格式與排序,不直接導致亂碼。

客戶端字元集設定方式

連線方式設定位置
命令列my.ini 中 [client] 區段
EMS 等 GUI 工具工具連線設定優先,其次回退 my.ini
JDBC連線字串指定:
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8
PHP (mysqli/PDO)連線後執行 SET NAMES utf8mb4

MySQL 內部轉換流程

  1. 客戶端送資料 → 依客戶端字元集解碼
  2. 轉換為資料庫/表/欄位定義的字元集儲存
  3. 讀取時反向轉換回客戶端字元集

若客戶端與資料庫字元集一致,可省略轉換提升效能;統一使用 utf8mb4 兼容性最佳,支援完整 Unicode(含 Emoji)。

常用檢查指令

-- 查看所有字元集變數
SHOW VARIABLES LIKE '%char%';

-- 重點關注:
-- character_set_client     客戶端字元集
-- character_set_database   當前資料庫字元集
-- character_set_server     伺服器預設字元集

-- 查看表字元集
SHOW TABLE STATUS FROM db_name LIKE 'table_name';

-- 查看欄位字元集
SHOW FULL COLUMNS FROM table_name;

-- 查看支援的字元集
SHOW CHARSET;

遷移建議

  • 新專案直接建庫建表指定 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  • 舊專案遷移:mysqldump --default-character-set=latin1 匯出 → iconv 轉碼 → SET NAMES utf8mb4 匯入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved