ASCII
sql
ISO 8859-1
數據庫
ASCII
字符集的基礎上又擴充了128個西歐經常使用字符(包括德法兩國的字母),也可使用1個字節來進行編碼。這個字符集也有一個別名latin1
GB2312
服務器
ASCII
字符集ASCII
字符集中,則採用1字節編碼,不然採用2字節編碼GBK
編碼
GB2312
字符集做了擴充,編碼方式上兼容GB2312
utf8
code
ASCII
字符集,採用變長編碼方式,編碼一個字符須要使用1~4
個字節utf8
只是Unicode字符集的一種編碼方案,Unicode
字符集能夠採用utf8
、utf16
、utf32
這幾種編碼方案,utf8
使用1~4個字節編碼一個字符,utf16
使用2個或4個字節編碼一個字符,utf32
使用4個字節編碼一個字符。
MySQL中的utf8和utf8mb4server
utf8mb3
:閹割過的utf8
字符集,只使用1~3個字節表示字符utf8mb4
:正宗的utf8
字符集,使用1~4個字節表示字符在MySQL中utf8
是utf8mb3
的別名
字符集的查看SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式]
排序
比較規則的查看SHOW COLLATION [LIKE 匹配的模式]
ci
後綴 | 英文釋義 | 描述 |
---|---|---|
_ai |
accent insensitive |
不區分重音 |
_as |
accent sensitive |
區分重音 |
_ci |
case insensitive |
不區分大小寫 |
_cs |
case sensitive |
區分大小寫 |
_bin |
binary |
以二進制方式比較 |
1. MySQL有4個級別的字符集和比較規則字符串
2. 服務器級別it
SHOW VARIABLES LIKE 'character_set_server'
SHOW VARIABLES LIKE 'collation_server'
[server] character_set_server=utf8 collation_server=utf8_general_ci
3. 數據庫級別
SHOW VARIABLES LIKE 'character_set_database'
SHOW VARIABLES LIKE 'collation_database'
CREATE DATABASE 數據庫名 [[DEFAULT] CHARACTER SET 字符集名稱] [[DEFAULT] COLLATE 比較規則名稱]; ALTER DATABASE 數據庫名 [[DEFAULT] CHARACTER SET 字符集名稱] [[DEFAULT] COLLATE 比較規則名稱];
建立數據庫不指定字符集和比較規則,則默認使用服務器級別的字符集和比較規則
4. 表級別
CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱]] ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱]
若是建立和修改表的語句中沒有指明字符集和比較規則,將使用該表所在數據庫的字符集和比較規則做爲該表的字符集和比較規則
5.列級別
CREATE TABLE 表名( 列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱], 其餘列... ); ALTER TABLE 表名 MODIFY 列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱];
對於某個列來講,若是在建立和修改的語句中沒有指明字符集和比較規則,將使用該列所在表的字符集和比較規則做爲該列的字符集和比較規則
6.僅修改字符集或僅修改比較規則
7.各級別字符集和比較規則小結
從發送請求到返回結果這個過程當中伴隨着屢次字符集的轉換,在這個過程當中會用到3個系統變量
系統變量 | 描述 |
---|---|
character_set_client | 服務器解碼請求時使用的字符集 |
character_set_connection | 服務器運行過程當中使用的字符集 |
character_set_results | 服務器向客戶端返回數據時使用的字符集 |
character_set_client
編碼的character_set_results
編碼後發送給客戶端character_set_connection
只是服務器在處理請求時使用的字符集,它是什麼其實沒多重要,可是必定要注意,該字符集包含的字符範圍必定涵蓋請求以及結果集中的字符,要否則會出現沒法將請求中的字符編碼成character_set_connection
字符集或者沒法編碼結果集中的字符SET NAMES 字符集名
等價於:
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
若是想寫進配置文件:
[client] default-character-set=utf8