概述
從本質上來講,計算機只識別二進位制程式碼,因此,不論計算機程式還是其處理的資料,最終都必須轉化為二進位制碼,計算機才能識別。人們給每一個文字元號編碼以便計算機識別處理,這就是計算機字符集的由來。
選擇合適的字符集
MySQL5.6支援幾十種字符集,包括UCS-2、UTF-16、UTF-16LE、UTF-32、UTF-8、utf8mb4等Unicode字符集,選擇字符集可以考慮如下幾個因素:
- 滿足應用支援語言需求,如果應用需要處理各式各樣的文字,應該選擇Unicode編碼,對於MySQL,建議為UTF-8;
- 如果應用中涉及已有資料匯入,要充分考慮資料庫字符集對已有資料的相容性。
- 如果資料庫只需要支援一般中文,資料量大,效能要求較高,那可以選擇雙位元組定長編碼的中文字符集,比如GBK,因為相對於UTF-8,GBK比較小,每個漢字只佔2個位元組,utf-8漢字需要3個位元組;相反,如果主要處理英文字元,選擇UTF-8更好,因為GBK,UCS-2,UTF-16中的西文字元編碼都是2個位元組。
- 如果資料庫需要做大量的字元運算,選擇定長字符集更好一些。
- 如果所有的客戶端程式都支援相同的字符集,則優先選擇該字符集作為資料庫的字符集。
常用字符集比較:
MySQL字符集
- MySQL支援在同一臺伺服器,同一個資料庫,甚至同一個表的不同欄位都可以使用不同的字符集。
- MySQL字符集包括
字符集
和校對規則
;其中字符集用來定義MySQL儲存字串的方式,校對規則用來定義字串比較方式,字符集與校對規則是一對多的關係。 - MySQL有4個級別的預設設定:伺服器級,資料庫級,表級,欄位級。伺服器級可以在MySQL配置檔案(my.cnf)中設定
character-set-server=utf-8
;其他是建立時候設定。 - 對於實際應用中, 還存在客戶端和伺服器之間的字符集和校對規則設定。MySQL提供3個引數設定:
character_set_client
、character_set_connection
、character_set_results
分別代表客戶端、連線、返回結果的字符集。通常不會單獨設定這3個引數,可以通過命令:set names ***
來設定,還可以設定my.cnf中的default-character-set=utf-8
來設定。
MySQL字符集系統變數含義如下: