在 MySQL 資料庫開發與維護中,字符集設定不當常導致亂碼問題,尤其在中文環境下更為常見。本文將系統介紹三種修改 MySQL 字符集的方法,分別適用於不同場景,助您徹底解決編碼困擾。
透過 SET 語句可即時調整字符集,無需重啟服務。若不加 GLOBAL 關鍵字,則僅對當前連線會話生效;加上則為全域生效(需 SUPER 權限)。
SET [GLOBAL] character_set_client = utf8;
SET [GLOBAL] character_set_connection = utf8;
SET [GLOBAL] character_set_database = utf8;
SET [GLOBAL] character_set_results = utf8;
SET [GLOBAL] character_set_server = utf8;
適用場景:臨時測試、單一連線需求、無重啟權限環境。
SET NAMES 'utf8' 是上述五條指令的簡寫,一次完成 client、connection、results 三個變數的設定,語法簡潔,常用於程式碼連線初始化階段。
SET NAMES 'utf8';
注意:此法不影響 character_set_database 與 character_set_server,且僅對當前會話有效。
編輯 MySQL 設定檔(Linux 通常為 /etc/my.cnf 或 /etc/mysql/my.cnf),在 [client] 與 [mysqld] 區段下各新增一行:
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
儲存後重啟 MySQL 服務(systemctl restart mysqld 或 service mysql restart),設定即永久生效,所有新連線自動繼承。
適用場景:生產環境標準化部署、根治亂碼問題、團隊協作專案。
encoding: utf8,資料庫建立時指定 CHARACTER SET utf8。CharSet=utf8 或執行 SET NAMES utf8。SHOW VARIABLES LIKE 'character_set%' 確認各項皆為 utf8。三種方法各有優劣:SET NAMES 最便捷適合開發階段;SET GLOBAL 適合運行期臨時調整;修改 my.cnf 則是生產環境的標準做法。建議專案初期即統一規劃字符集策略,避免後期資料清洗成本。