MySQL 資料庫在處理中文資料時,亂碼問題一直是開發者常見的痛點。無論是開發環境還是生產環境,字元集設定不當都會導致資料存儲錯誤、查詢結果顯示異常。本文將針對 Windows 與 Linux 兩大主流作業系統,提供最精簡、有效的解決方案,幫助您徹底告別中文亂碼困擾。
在 Windows 環境中,若安裝 MySQL 時已選擇 UTF-8 編碼,解決亂碼極為簡單:
SET NAMES gb2312;核心原理: SET NAMES 相當於同時設定 character_set_client、character_set_connection、character_set_results 三個系統變數,讓客戶端、連線層、結果集統一使用指定編碼。前提是資料庫本身建立時採用 UTF-8,資料才不會在存儲階段損壞。
Linux 下需修改主設定檔 /etc/mysql/my.cnf(或 /etc/my.cnf),在兩個關鍵區段加入字元集參數,並重啟服務生效。
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'
default-character-set=utf8:設定伺服器預設字元集為 UTF-8。init_connect='SET NAMES utf8':每當新連線建立時自動執行,確保連線層編碼一致性。sudo systemctl restart mysql # 或 service mysql restart
重啟後,所有新連線將預設使用 UTF-8,中文亂碼問題徹底解決。
utf8mb4(支援完整 Unicode,含 Emoji),而非舊版 utf8(實為 utf8mb3)。SHOW VARIABLES LIKE 'character_set_%'; 確認所有相關變數均為 utf8mb4。?characterEncoding=utf8mb4,PHP PDO 設定 charset=utf8mb4,Python 使用 charset='utf8mb4'。Windows 下臨時用 SET NAMES gb2312 急救,Linux 下改 my.cnf 根治。長遠來看,全鏈路採用 utf8mb4 才是防亂碼的終極方案。配置無大小,細節定成敗,願您的資料庫永遠說清標準中文!