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

MySQL 字符集修改全攻略:Linux/Windows 配置檔、SQL 指令、亂碼根因與解決方案

     編輯:MySQL 綜合教學

前言

字符集不一致是導致資料亂碼的核心原因。本文系統整理 Linux/Windows 下修改字符集的多種方式,並深入解析 MySQL 字符集架構與亂碼產生機制。

一、Linux 環境修改字符集(以 utf8mb4 為例)

  1. 尋找可用配置檔:
    find / -name 'my*.cnf' -o -name 'my.ini'
  2. 複製範本至 /etc/my.cnf:
    cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
  3. 編輯 /etc/my.cnf,在 [client] 與 [mysqld] 下新增:
    [client]
    default-character-set=utf8mb4
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
  4. 重啟 MySQL:
    systemctl restart mysqld
  5. 驗證:
    SHOW VARIABLES LIKE 'character_set_%';
    SHOW VARIABLES LIKE 'collation_%';

二、Windows 環境修改字符集

  1. 停止 MySQL 服務。
  2. 於安裝目錄找到 my.ini(若無則複製 my-medium.ini 並重命名)。
  3. 在 [client] 與 [mysqld] 區塊加入:
    default-character-set=utf8mb4
    character-set-server=utf8mb4
  4. 啟動服務並驗證。

三、SQL 指令臨時/永久修改

資料庫/資料表層級

-- 建庫指定
CREATE DATABASE `mydb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改資料庫
ALTER DATABASE `mydb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改資料表
ALTER TABLE `mytable` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

會話層級(連線期間生效)

SET NAMES utf8mb4;
-- 等同於
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;

四、MySQL 字符集架構與亂碼根因

MySQL 字符集分四層:伺服器 → 資料庫 → 資料表 → 連線。預設若未指定,層層繼承 latin1,導致中文存儲錯誤。

亂碼兩大場景:

  • 寫入時亂碼:客戶端編碼與連線字符集不一致,資料被錯誤轉碼存入。
  • 讀取時亂碼:結果字符集與客戶端顯示編碼不符。

核心解決原則:客戶端、連線、結果三者字符集必須一致,且與資料存儲字符集匹配。

五、常見字符集選型建議

字符集特點適用場景
utf8mb4支援完整 Unicode(含 Emoji),3-4 字節/字新專案首選,國際化系統
utf8MySQL 早期實作,僅支援 BMP 平面(3 字節)舊系統相容
gbk雙字節,支援簡繁中文,不支援多語言純中文舊系統
latin1單字節,無中文支援不建議使用

六、快速排查清單

  1. 執行 SHOW VARIABLES LIKE '%char%'; 確認四層字符集。
  2. 檢查應用程式連線字串是否含 characterEncoding=utf8mb4。
  3. 確認資料庫/資料表/欄位實際字符集(SHOW CREATE TABLE)。
  4. 若使用 JDBC/ODBC/PHP PDO,確保驅動版本支援 utf8mb4。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved