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

MySQL 字符集與校對規則選型指南:從 latin1 到 utf8mb4 的演進

     編輯:MySQL 綜合教學

MySQL 字符集與校對規則選型指南:從 latin1 到 utf8mb4 的演進

字符集決定資料如何編碼儲存,校對規則決定如何比較排序。選型錯誤會導致亂碼、索引失效、排序錯誤。本文系統梳理選型依據、四級預設層級與客戶端連線字符集配置。

選型決策矩陣

場景推薦字符集理由
多語言/國際化/Emojiutf8mb4完整 Unicode,4 字節支援輔助平面
純中文、極度追求空間/效能gbk雙字節固定長,漢字佔 2 字節 vs utf8mb4 3-4 字節
以英文/數字為主utf8mb4ASCII 兼容,單字節,通用性最強
大量字串運算/排序定長字符集 (ucs2/utf16)避免變長編碼計算開銷
舊系統遷移、相容性優先沿用原字符集避免資料轉換風險

MySQL 四級預設字符集層級

  1. Server 級:my.cnf character-set-server=utf8mb4
  2. Database 級:CREATE DATABASE db CHARSET utf8mb4
  3. Table 級:CREATE TABLE t (...) CHARSET utf8mb4
  4. Column 級:col VARCHAR(100) CHARSET utf8mb4

越低層級優先級越高。建議 Server/Database 統一 utf8mb4,Table/Column 僅在特殊需求覆蓋。

字符集 vs 校對規則

  • 字符集:編碼方式(如 utf8mb4)。
  • 校對規則:比較/排序規則(如 utf8mb4_general_ci 不區分大小寫、utf8mb4_bin 二進位比較、utf8mb4_0900_ai_ci 8.0 預設、支援重音不敏感)。
  • 一對多:一個字符集對應多個校對規則。

連線字符集三參數

character_set_client    -- 客戶端發送 SQL 的編碼
character_set_connection -- 連線層轉換目標編碼
character_set_results   -- 伺服器返回結果編碼

一鍵設定:SET NAMES utf8mb4(等同設定以上三者)。

持久化:my.cnf [client] default-character-set=utf8mb4。

常見亂碼根因與對策

現象根因修正
存入中文變 ???表/欄位字符集非 utf8mb4ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4
讀出亂碼連線字符集與儲存不一致SET NAMES utf8mb4 / 應用層連線池配置
Emoji 截斷/報錯使用 utf8(3 字節)而非 utf8mb4全鏈路升級 utf8mb4
排序錯誤校對規則不符預期指定 COLLATE utf8mb4_0900_ai_ci

總結

新專案無條件選 utf8mb4 + utf8mb4_0900_ai_ci。舊專案評估遷移成本後統一升級。全鏈路(Server/DB/Table/Column/Connection/Application)字符集一致,是杜絕亂碼的唯一鑰匙。

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