首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL my.cnf 修改預設字符集為 UTF-8 完整配置與 unicode/ general/ bin 排序規則選型指南

     編輯:MySQL 資料庫相關知識

透過 my.cnf 統一設定字符集是生產環境標準做法。本文給出生產級配置範本、關鍵參數解析、utf8_general_ci vs utf8_unicode_ci vs utf8_bin 深度對比與避坑指南。

一、生產級 my.cnf 字符集配置範本

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# 連線層初始化
init_connect = 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'

# 服務端預設
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 強制忽略客戶端字符集宣告,防亂碼
skip-character-set-client-handshake
關鍵避坑:[mysqld] 區段不可使用 default-character-set,會導致啟動報錯。

二、排序規則深度對比

排序規則特性德語 ß 處理大小寫敏感效能適用場景
utf8_general_ci簡化排序,速度快ß = s不敏感最快中文/英文通用、高併發
utf8_unicode_ciUCA 標準排序,準確ß = ss不敏感稍慢多語言、歐洲語系嚴格排序
utf8_bin二進制比較ß ≠ s/ss敏感最快需區分大小寫、Base64、Hash 值

核心差異

  • general:採用簡化規則,ß = s,œ = oe,適合亞洲語系、追求速度
  • unicode:遵循 Unicode Collation Algorithm(UCA),ß = ss,œ = oe,德語/法語排序正確
  • bin:按字節碼比較,'A' != 'a',索引可用於大小寫敏感查詢

中文環境建議

collation-server = utf8mb4_general_ci
-- 或 8.0+ 推薦
collation-server = utf8mb4_0900_ai_ci

三、驗證生效

SHOW VARIABLES LIKE '%char%';
SHOW VARIABLES LIKE '%collation%';

四、現有庫表轉換

ALTER DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

五、應用層配合

  • JDBC:useUnicode=true&characterEncoding=utf8mb4
  • Python:charset='utf8mb4'
  • Go:dsn "charset=utf8mb4,utf8"
  • 連線池初始化 SQL:SET NAMES utf8mb4 COLLATE utf8mb4_general_ci

統一字符集配置,從 Server 到 Client 到 Application,全鏈路一致,徹底告別亂碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved