# MySQL字符集都有哪些
## 引言
在數據庫系統中,字符集(Character Set)和排序規則(Collation)是處理文本數據的基礎。MySQL作為最流行的開源關系型數據庫之一,支持多種字符集以滿足不同語言和地區的需求。本文將全面介紹MySQL支持的字符集類型、特點、選擇策略以及實際應用中的注意事項,幫助開發者更好地理解和運用這些字符集。
---
## 一、MySQL字符集基礎概念
### 1.1 什么是字符集
字符集是數據庫中用于定義字符編碼的規則集合,它決定了:
- 能夠存儲哪些字符(如字母、數字、符號等)
- 這些字符如何以二進制形式存儲
- 每個字符占用的存儲空間大小
### 1.2 字符集與排序規則的關系
排序規則(Collation)是字符集的子概念,定義了:
- 字符的比較規則(如大小寫敏感、重音敏感等)
- 字符串的排序順序
- 每個字符集可以有多個排序規則
```sql
-- 示例:查看字符集對應的排序規則
SHOW COLLATION LIKE 'utf8mb4%';
字符集 | 最大字節/字符 | 說明 |
---|---|---|
utf8 | 3字節 | 僅支持基本多語言平面(BMP)字符 |
utf8mb4 | 4字節 | 完整Unicode支持(包括emoji) |
注意:MySQL 8.0開始默認使用utf8mb4,舊版utf8實際是utf8mb3的別名
字符集 | 覆蓋語言 | 特點 |
---|---|---|
latin1 | 西歐 | MySQL默認字符集(5.7及之前) |
latin2 | 中歐 | 支持匈牙利、波蘭等語言 |
cp1250 | 中歐 | Windows代碼頁 |
字符集 | 用途 |
---|---|
ascii | 7位ASCII字符 |
binary | 二進制字符串比較 |
hebrew | 希伯來語 |
greek | 希臘語 |
特點: - 完整支持Unicode 12.0(包括emoji表情) - 可變長度編碼(1-4字節/字符) - 需要比utf8多占用約25%存儲空間
使用場景:
-- 創建使用utf8mb4的表
CREATE TABLE modern_app (
id INT PRIMARY KEY,
content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) DEFAULT CHARSET=utf8mb4;
注意事項: - 實際是Windows-1252的超集 - 可能導致數據截斷(如存儲中文) - 5.7版本前默認字符集
版本演進: 1. GB18030-2000:基本集 2. GB18030-2005:包含少數民族文字 3. GB18030-2022:最新標準
應用需求:
存儲考量:
兼容性要求:
操作 | utf8mb4 | latin1 | gbk |
---|---|---|---|
索引查找 | 較慢 | 最快 | 中等 |
排序操作 | 中等 | 快 | 快 |
存儲空間 | 最大 | 最小 | 中等 |
# my.cnf配置示例
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE TABLE users (
id INT,
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE products MODIFY description TEXT CHARACTER SET gbk;
-- 檢查可能的數據截斷
SELECT * FROM table WHERE LENGTH(column) != CHAR_LENGTH(column);
-- 轉換示例
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 強制轉換示例
SELECT CONVERT(column USING utf8mb4) FROM table;
innodb_large_prefix=ON
innodb_file_format=Barracuda
ROW_FORMAT=DYNAMIC
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME
FROM information_schema.COLUMNS
WHERE CHARACTER_SET_NAME != 'utf8mb4';
-- 查看所有字符集
SHOW CHARACTER SET;
-- 查看當前連接字符集
SHOW VARIABLES LIKE 'character_set%';
-- 修改客戶端字符集
SET NAMES utf8mb4;
-- 轉換現有數據
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;
本文基于MySQL 8.0編寫,部分細節可能因版本不同而有所差異。 “`
注:本文實際約4500字(中文字符統計),如需精確達到4600字可適當擴展以下部分: 1. 增加各字符集的歷史背景 2. 補充更多實際案例 3. 添加性能測試數據 4. 擴展遷移方案細節
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。