1 字符集和比較規則介紹
字符集: 字符的編碼規則
比較規則:字符集中字符比較大小的規則,一般是對字符串列進行排序,也叫排序規則
兩者關係:
一個字符集可以有許多比較規則,會有一個默認的比較規則;
而一個比較規則一定會對應一個字符集。
字符集和比較規則的使用說明:
1)字符集和比較規則有4個級別,分別爲:服務器、數據庫、表、字符串字段;
2)每個級別如果沒有設置字符集或者比較規則,則會用上一級別的字符集和比較規則;
例如:在建表的時候如果沒有指明字符集和比較規則, 會使用數據庫的字符集和比較規則。
3)只修改字符集,則比較規則會跟着一起變; 只修改比較規則,字符集會跟着一起變;
查看數據庫中字符集和比較規則的語句:
show variables like '%character_set_database%'; 查看數據庫字符集
show variables like '%collation_database'; 查看數據庫比較規則
2 客戶端和服務器字符集的交互
服務器接收到客戶端的請求數據後, 會經過3層編碼轉換,分別爲:
character_set_client 服務器接收請求的編碼
character_set_connection 服務器處理請求的編碼
character_set_results 服務器返回結果給客戶端的編碼
服務器會經過3種編碼的轉換,過程如下:
當客戶端的字符集和服務器的這3個字符集編碼不同時, 會解析不了數據, 一般都要求客戶端和服務器的編碼相同。
服務端設置3種客戶端編碼的命令爲:
SET NAMES 字符集名;
這個命令等價下面3個命令的組合:
set character_set_client = 字符集名;
set character_set_connection = 字符集名;
set character_set_results = 字符集名;
客戶端設置服務端3種字符集的方法,可以在客戶端啓動的時候設置一個選項:
default-character-set=utf8 效果和把上面3個字符集一個一個設置是一樣的