MySQL 的字符集支援包含兩個核心面向:字符集與排序規則。字符集決定了資料如何被編碼儲存,而排序規則則定義了字符比較與排序的邏輯。MySQL 允許將字符集設定細化至四個層級:伺服器層、資料庫層、資料表層、連接層,這種彈性架構讓開發者能精確控制各層級的編碼行為。
MySQL 的字符集設定遵循明確的繼承鏈條,從編譯期一路延伸至欄位層級:
latin1。my.ini(或 my.cnf)中的 default-character-set 參數覆蓋編譯期預設值。mysqld 啟動時可透過命令列參數指定,此時 character_set_server 系統變數被設定為該值。character_set_server。USE db_name 時,character_set_database 變更為該資料庫的預設字符集。character_set_database 作為預設字符集。若全程未干預,所有資料將以 latin1 儲存;但現代安裝精靈通常會啟用多語言支援,自動將配置檔中的 default_character_set 設為 UTF-8,確保預設環境支援中文等多語言資料。
可透過以下指令檢視系統目前的字符集與排序規則配置:
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
或使用 STATUS 命令快速查看關鍵字符集變數:
MySQL> STATUS;
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
輸出結果中,character_set_client、character_set_connection、character_set_results 三者決定了客戶端與伺服器間的編碼轉換邏輯,是解決亂碼問題的關鍵所在。
utf8mb4(支援完整 Unicode,含 Emoji)與 utf8mb4_unicode_ci 排序規則。SET NAMES utf8mb4,等同於同時設定 client、connection、results 三個變數。