首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 伺服器字元集設定失效問題:character_set_server 重啟後復原的解決方案

     編輯:MySQL 綜合教學

MySQL 伺服器字元集設定失效問題:character_set_server 重啟後復原的解決方案

遭遇 SET character_set_server=utf8 臨時生效但重啟後復原為 gbk 的經典問題,分析根因並提供持久化解決方案。

問題現象

> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_results    | utf8                       |
| character_set_server     | gbk   <-- 伺服器預設仍為 gbk |
+--------------------------+----------------------------+

執行 SET character_set_server=utf8 後暫時正常,但服務重啟失效。

根本原因

SET GLOBAL / SET 動態修改僅影響當前執行實例的記憶體配置,不寫入配置檔。服務重啟時讀取 my.cnf / my.ini 還原預設值。

持久化解決方案

方法一:修改配置檔 (標準做法)

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

修改後 必須重啟服務 生效。

方法二:應用程式層級設定 (暫時/補救)

在每次資料庫連線建立後立即執行:

$conn->query("SET NAMES utf8");
# 或分別設定
$conn->query("SET character_set_client = utf8");
$conn->query("SET character_set_results = utf8");
$conn->query("SET character_set_connection = utf8");

缺點: 每次連線額外 3 次往返,高併發下影響效能;且無法修正伺服器層級預設 (如新建資料庫預設字元集)。

進階建議:升級至 utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 或 utf8mb4_general_ci (速度較快、排序準確度稍低)
  • utf8mb4 支援完整 Unicode (含 Emoji、生僻字)
  • 應用端連線參數同步調整:JDBC characterEncoding=utf8mb4、PDO charset=utf8mb4
  • 既有表轉換:ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;

驗證清單

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
# 確認 client/connection/results/database/server 均為 utf8mb4
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved