MySQL 中文亂碼是經典議題。本文從字元集轉換流程、關鍵變數、實測步驟三個層面,系統性說明亂碼成因與解決之道。
MySQL 為 Client-Server 架構,每次操作經歷:
character_set_server → character_set_database → 表 → 欄位繼承。Client 端顯示工具需支援對應編碼(如 SecureCRT 可手動切換 UTF-8/GBK)。
character_set_server
⇒ character_set_database
⇒ table charset
⇒ column charset
my.ini 指定 character_set_server。character_set_filesystem(檔案系統轉換,預設 binary)、character_set_system(永遠 UTF-8,存系統元資料)、character_set_dir(字元集定義檔目錄)。實務啟示:若欄位字元集為 Latin1,實際儲存內容可能是任意編碼;若為 UTF-8/GBK,則應對應該編碼,否則資料已損壞無法還原。
SET NAMES latin1;(等同設定 client/connection/results)。INSERT 中文,SELECT 顯示正常。SET NAMES utf8mb4、資料庫/表/欄位 utf8mb4、連線字串 charset=utf8mb4)。