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

徹底搞懂 MySQL utf8 與 utf8mb4:為什麼要用 utf8mb4?

     編輯:MySQL 資料庫相關知識

背景

MySQL 5.5.3 引入 utf8mb4,mb4 = most bytes 4,專為 4 字節 Unicode 字符設計。utf8mb4 是 utf8 的超集,遷移無需數據轉換,僅改字符集。

為什麼 utf8 存不下 Emoji?

  • MySQL 早期 utf8 別名 utf8mb3,最大 3 字節/字符,覆蓋 Unicode BMP(基本多文種平面,0x0000–0xFFFF)。
  • Emoji、生僻漢字、新增 Unicode 字符位於輔助平面(> 0xFFFF),需 4 字節,utf8 直接報錯或截斷。

歷史緣由

早期 Unicode 認為 65535 字符足夠,MySQL 為了 CHAR(N) 固定長度計算(3×N 字節),將 utf8 限制為 3 字節。後來 Unicode 擴展,MySQL 為兼容舊表結構不改 utf8,另推 utf8mb4。

最佳實踐建議

  1. 新項目默認用 utf8mb4,獲得完整 Unicode 支持。
  2. CHAR 類型會預分配 4×N 字節,建議改用 VARCHAR 節省空間。
  3. 遷移舊表:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;(含索引重建,大表慎重)。
  4. 連接層也要設 SET NAMES utf8mb4 或驅動屬性 characterEncoding=utf8mb4。

總結

utf8mb4 = 真正的 UTF-8,utf8 = 截斷版 UTF-8。為兼容 Emoji、生僻字、未來擴展,請始終選擇 utf8mb4。

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