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

MySQL 伺服器字元集設定完整指南:從臨時修改到永久生效

     編輯:MySQL 綜合教學

問題現象

全新安裝的 MySQL 啟動後,執行 STATUS 發現 Server characterset: latin1,導致中文資料儲存亂碼。預設字元集為 latin1 是舊版 MySQL 的遺留預設值,現代應用幾乎都需要 UTF-8(或 utf8mb4)。

三種設定方式對比

方式一:啟動參數指定(臨時,重啟失效)

/etc/init.d/mysql.server start --character-set-server=utf8

缺點:每次重啟都需手動加參數,不適合生產環境。

方式二:執行期動態修改(無效,重連失效)

SET character_set_server=utf8;

缺點:僅影響當前連線,重新登入即恢復 latin1,因為伺服器啟動時已讀取配置檔。

方式三:修改配置檔(永久生效,推薦)

編輯 /etc/my.cnf(或 /etc/mysql/my.cnf),在 [mysqld] 區塊新增:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8mb4   # 建議使用 utf8mb4 完整支援 Emoji
collation-server=utf8mb4_unicode_ci

重啟服務:systemctl restart mysqld 或 service mysql restart。

驗證設定生效

mysql> STATUS;
...
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
...

補充:客戶端與連線字元集

伺服器端設定 character-set-server 只控制預設值。應用程式連線時仍建議顯式指定:

  • JDBC:jdbc:mysql://host/db?characterEncoding=utf8mb4
  • Python MySQLdb:charset='utf8mb4'
  • PHP PDO:charset=utf8mb4 在 DSN 中

避坑提醒

  1. utf8 vs utf8mb4:MySQL 的 utf8 僅支援 3 位元組字元(BMP 範圍),無法儲存 Emoji 與部份生僻字,**務必使用 utf8mb4**
  2. 資料庫/資料表/欄位層級:若歷史資料表已為 latin1,需執行 ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 轉換
  3. my.cnf 位置不固定:mysql --help | grep my.cnf 可查看實際讀取順序
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved