MySQL 常出現 Illegal mix of collations for operation 錯誤,根因在於多層級字符集設定不一致。本文系統梳理字符集層級並給出統一配置方案。
character-set-server / default-character-set (預設採用)character-set-databasecharacter-set-tablecharacter-set-client (連線發送)character-set-results (回傳編碼),若未設定則回落至 client 設定最佳實踐:僅在伺服器層設定 character-set-server=utf8,建庫建表時不單獨指定,自動繼承伺服器設定,確保全鏈路一致。
vim /etc/mysql/my.cnf[client] 區段,在其下添加:default-character-set=utf8/etc/init.d/mysql stop /etc/init.d/mysql start
mysql> SHOW VARIABLES LIKE 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | +--------------------------+--------+
所有關鍵變數均顯示 utf8 即表示配置成功,後續涉及中文操作將不再出現亂碼或排序規則衝突。
此方案通過統一伺服器端字符集,從源頭消除多層級編碼不匹配問題,適用於 MySQL 5.5+ 版本。