安裝 XAMPP 後未提示字符集配置,執行 SHOW VARIABLES LIKE '%char%' 發現:
character_set_server = latin1(服務端預設)character_set_database = utf8(庫級預設)utf8mb4直接在 my.ini 新增 character_set_client=utf8mb4 導致 MySQL 重啟失敗。
character_set_client 是會話級系統變數,不可寫入配置檔作為全域預設。[mysqld] 區塊設定 character_set_server、collation_server;[client] 區塊設定 default-character-set。utf8mb4(支援 4 字節 Emoji),舊 utf8 實為 utf8mb3。[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'
skip_character_set_client_handshake = ON
# character_sets_dir 保持預設即可,除非自定義字符集
skip_character_set_client_handshake:強制忽略客戶端發送的字符集,統一由伺服器指定,防止應用層未設字符集導致亂碼。init_connect:非超級用戶連線時自動執行 SET NAMES utf8mb4,兼容舊驅動。mysqladmin -u root -p shutdown 再啟動,或用 XAMPP 控制面板重啟。[mysqld](服務端)與 [client]/[mysql](客戶端)區塊。CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci,配置檔僅影響新建對象預設值。characterEncoding=utf8mb4(JDBC)或 charset=utf8mb4(PHP PDO)。SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 預期全為 utf8mb4 / utf8mb4_unicode_ci
總結:MySQL 字符集配置層級分明(Server/Database/Table/Column/Connection),以 my.ini 服務端區塊統一 Server/Database/Connection 三層預設為 utf8mb4 是穩健方案。切勿對會話級變數寫死配置檔。