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

MySQL 查看所有可用字符集與排序規則:SHOW CHARACTER SET 完整輸出解析

     編輯:MySQL 綜合教學

MySQL 查看所有可用字符集與排序規則:SHOW CHARACTER SET 完整輸出解析

字符集決定了數據如何編碼存儲,排序規則決定了字符比較與排序邏輯。選擇正確的字符集(如 utf8mb4)是避免亂碼、支援 Emoji、實現多語言存儲的前提。本文展示 SHOW CHARACTER SET 完整輸出,並解析核心欄位含義與選型建議。

指令與輸出

mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     | 2      |
| dec8     | DEC West European           | dec8_swedish_ci     | 1      |
| cp850    | DOS West European           | cp850_general_ci    | 1      |
| hp8      | HP West European            | hp8_english_ci      | 1      |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    | 1      |
| latin1   | cp1252 West European        | latin1_swedish_ci   | 1      |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   | 1      |
| swe7     | 7bit Swedish                | swe7_swedish_ci     | 1      |
| ascii    | US ASCII                    | ascii_general_ci    | 1      |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    | 3      |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    | 2      |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   | 1      |
| tis620   | TIS620 Thai                 | tis620_thai_ci      | 1      |
| euckr    | EUC-KR Korean               | euckr_korean_ci     | 2      |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    | 1      |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   | 2      |
| greek    | ISO 8859-7 Greek            | greek_general_ci    | 1      |
| cp1250   | Windows Central European    | cp1250_general_ci   | 1      |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      | 2      |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   | 1      |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci | 1      |
| utf8     | UTF-8 Unicode (3-byte max)  | utf8_general_ci     | 3      |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     | 2      |
| cp866    | DOS Russian                 | cp866_general_ci    | 1      |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  | 1      |
| macce    | Mac Central European        | macce_general_ci    | 1      |
| macroman | Mac West European           | macroman_general_ci | 1      |
| cp852    | DOS Central European        | cp852_general_ci    | 1      |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   | 1      |
| utf8mb4  | UTF-8 Unicode (4-byte max)  | utf8mb4_general_ci  | 4      |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   | 1      |
| utf16    | UTF-16 Unicode              | utf16_general_ci    | 4      |
| utf16le  | UTF-16LE Unicode            | utf16le_general_ci  | 4      |
| cp1256   | Windows Arabic              | cp1256_general_ci   | 1      |
| cp1257   | Windows Baltic              | cp1257_general_ci   | 1      |
| utf32    | UTF-32 Unicode              | utf32_general_ci    | 4      |
| binary   | Binary pseudo charset       | binary              | 1      |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  | 1      |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   | 2      |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci | 3      |
+----------+-----------------------------+---------------------+--------+
40 rows in set (0.00 sec)

四大欄位深度解析

欄位 含義 關鍵洞察
Charset字符集名稱,用於 CHARACTER SET / CHARSET 子句區分 utf8 (別名 utf8mb3, 最大 3 字節) 與 utf8mb4 (真正 UTF-8, 最大 4 字節, 支援 Emoji、罕見漢字)
Description人類可讀描述:編碼標準 + 覆蓋語言範圍如 gbk 覆蓋中日韓擴展,latin1 僅西歐語言
Default collation該字符集的預設排序規則後綴含義:_ci = Case Insensitive (大小寫不敏感),_cs = Case Sensitive,_bin = Binary (按字節碼比較),_general_ci = 通用規則(速度快,準確度略低),_unicode_ci = UCA 標準規則(準確,較慢)
Maxlen單字符最大字節數直接影響列定義長度換算:VARCHAR(100) CHARSET utf8mb4 最大佔 400 字節 + 1-2 字節長度前綴。InnoDB 單行限制 ~8KB,單索引鍵長 767 字節 (或 3072 字節啟用 innodb_large_prefix)

中文環境核心字符集對比

字符集 Maxlen 覆蓋範圍 排序規則示例 推薦度
gb231226763 漢字 + 682 符號(基礎國標)gb2312_chinese_ci❌ 過時,缺字嚴重
gbk221886 字符(含 GB2312 + 擴展 + 日韓)gbk_chinese_ci⚠️ 僅中文舊系統維護用
utf8 (utf8mb3)3BMP 平面 (U+0000~U+FFFF),無 Emoji、無生僻字utf8_general_ci❌ 偽 UTF-8,新項目禁用
utf8mb44完整 Unicode (U+0000~U+10FFFF),含 Emoji、生僻字、各語言utf8mb4_general_ci / utf8mb4_0900_ai_ci (8.0+ 推薦)✅ 新項目唯一首選

配置最佳實踐

[mysqld]
# 服務端級別:影響新建庫表的預設字符集
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci  # 8.0+ 推薦,支援重音不敏感、準確排序
# 5.7 使用 utf8mb4_general_ci 或 utf8mb4_unicode_ci

[client]
# 客戶端默認字符集(影響連接握手)
default-character-set = utf8mb4

[mysql]
# mysql 命令行客戶端
default-character-set = utf8mb4

驗證生效:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

排序規則選型指南

  • 通用業務: utf8mb4_0900_ai_ci (8.0+) / utf8mb4_general_ci (5.7) —— 大小寫、重音不敏感,速度快。
  • 精確排序/多語言: utf8mb4_unicode_ci / utf8mb4_0900_ai_ci —— 遵循 UCA 標準,德語 ß=ss、重音字母正確排序。
  • 區分大小寫/重音: utf8mb4_0900_as_cs / utf8mb4_bin —— 密碼驗證、代碼比對、精確去重。
  • 二進制比較: binary / utf8mb4_bin —— 按字節碼比較,最快,適合不需語義排序的場景。

總結

SHOW CHARACTER SET 列出的 40 種字符集中,utf8mb4 以 Maxlen=4 完整支撐 Unicode,是現代 MySQL 應用的唯一標準選擇。配合 utf8mb4_0900_ai_ci (8.0) 或 utf8mb4_general_ci (5.7) 作為預設排序規則,並在 my.cnf 服務端/客戶端雙端鎖定 character-set-server/client = utf8mb4,即可從源頭消除字符集亂碼、Emoji 存儲失敗、排序錯誤等經典痛點。

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