[toc] 什麼是字元集(character set) 字元的二進位編碼方式 二進位編碼到一套字元的映射 二進位 編碼 字元 校對規則(collation) 在字元集內用於比較字元的一套規則 ASCII碼 1個位元組由8個二進位位組成 1個位元組可表示256種不同的狀態(256個不同符號) ASCII碼 ...
目錄
什麼是字元集(character set)
- 字元的二進位編碼方式
- 二進位編碼到一套字元的映射
- 二進位->編碼->字元
校對規則(collation)
- 在字元集內用於比較字元的一套規則
ASCII碼
- 1個位元組由8個二進位位組成
- 1個位元組可表示256種不同的狀態(256個不同符號)
- ASCII碼規定了128個字元(英文字元和一些標點符號)的編碼
Unicode國際化支持
- 世界上存在多種編碼方式,同一個二進位數字被解釋成了不同的符號
- 現存 編碼 不能在多語言環境中使用,誕生了Unicode(統一碼)
- 一個字元的Unicode編碼是確定的
- Unicode編碼實現方式各不相同
- Unicode的實現方式稱為Unicode轉化格式(UTF)
UTF-8
- UTF-8是Unicode的實現方式之一
- 其它實現方式還有UTF-16, UTF-32
- 變長編碼,一個符號使用1~4個位元組表示
- utf8是MySQL存儲Unicode數據的一種可選方法
utf8
- MySQL中實現了UTF-8編碼的unicode 字元集
- MySQL中utf8是utf8mb3的別名
- utf8中,一個符號使用1~3個節點表示
- 對UTF-8支持不徹底,可採用utf8mb4字元集
utf8與utf8mb4的關係
- 都是實現了UTF-8編碼的unicode 字元集
- utf8僅支持基本多語言平面Basic Multilingual Plane (BMP)
- utf8mb4支持BMP之外的補充字元(如emoji,emoji 是一種特殊的 Unicode 編碼)
- utf8 一個字元最多使用3個位元組存儲,utf8mb4 一個字元最多使用4個位元組存儲
- 對於BMP字元,utf8和utf8mb4具有相同的編碼,相同的長度
- 對於非BMP字元,utf8mb4使用4個位元組來存儲,utf8不能存儲非BMP字元
- innodb中預設最大可對767個位元組建立索引
- 使用utf8 的列最多可對255個字元建立索引
- 使用utf8mb4 的列最多可對191個字元建立索引
超集
- 字元集A,B ,B支持的所有字元A都支持,A 是B超集
- 比如 GBK字元集是GB2312字元集的超集,它們又都是ASCII字元集的超集
- utf8mb4是utf8的超集
字元集設置
set names x 等價於
- set character_set_client=x;
- set character_set_connection=x;
- set character_set_results=x;
--default-character-set 用戶連接時設置字元集 等價於
- set character_set_client=x;
- set character_set_connection=x;
- set character_set_result=x;
init-connect=set names binary- 讓client和server交互的時候以 什麼模式(不做任何轉化)來傳送
default-character-set
- 設置[mysql]和[client] 中的字元集
character-set-server
- 設置[mysqld] 進程的預設字元集
collation-server
- 設置[mysqld] 進程的預設校對規則
- utf8_general_ci 查找、排序不區分大小寫
- utf8_bin 查找、排序區分大小寫
參考
Unicode Support
字元集與編碼雜談
ASCII,Unicode 和 UTF-8
清官談mysql中utf8和utf8mb4區別