概述
從本質(zhì)上來講,計算機只識別二進制代碼育特,因此丙号,不論計算機程序還是其處理的數(shù)據(jù)先朦,最終都必須轉(zhuǎn)化為二進制碼,計算機才能識別犬缨。人們給每一個文字符號編碼以便計算機識別處理喳魏,這就是計算機字符集的由來。
選擇合適的字符集
MySQL5.6支持幾十種字符集怀薛,包括UCS-2刺彩、UTF-16、UTF-16LE枝恋、UTF-32创倔、UTF-8、utf8mb4等Unicode字符集焚碌,選擇字符集可以考慮如下幾個因素:
- 滿足應用支持語言需求畦攘,如果應用需要處理各式各樣的文字,應該選擇Unicode編碼十电,對于MySQL知押,建議為UTF-8;
- 如果應用中涉及已有數(shù)據(jù)導入,要充分考慮數(shù)據(jù)庫字符集對已有數(shù)據(jù)的兼容性鹃骂。
- 如果數(shù)據(jù)庫只需要支持一般中文台盯,數(shù)據(jù)量大,性能要求較高偎漫,那可以選擇雙字節(jié)定長編碼的中文字符集爷恳,比如GBK有缆,因為相對于UTF-8象踊,GBK比較小,每個漢字只占2個字節(jié)棚壁,utf-8漢字需要3個字節(jié)杯矩;相反,如果主要處理英文字符袖外,選擇UTF-8更好史隆,因為GBK,UCS-2,UTF-16中的西文字符編碼都是2個字節(jié)。
- 如果數(shù)據(jù)庫需要做大量的字符運算曼验,選擇定長字符集更好一些泌射。
- 如果所有的客戶端程序都支持相同的字符集,則優(yōu)先選擇該字符集作為數(shù)據(jù)庫的字符集鬓照。
常用字符集比較:
MySQL字符集
- MySQL支持在同一臺服務(wù)器熔酷,同一個數(shù)據(jù)庫,甚至同一個表的不同字段都可以使用不同的字符集豺裆。
- MySQL字符集包括
字符集
和校對規(guī)則
拒秘;其中字符集用來定義MySQL存儲字符串的方式,校對規(guī)則用來定義字符串比較方式,字符集與校對規(guī)則是一對多的關(guān)系躺酒。 - MySQL有4個級別的默認設(shè)置:服務(wù)器級押蚤,數(shù)據(jù)庫級,表級羹应,字段級揽碘。服務(wù)器級可以在MySQL配置文件(my.cnf)中設(shè)置
character-set-server=utf-8
;其他是創(chuàng)建時候設(shè)置。 - 對于實際應用中量愧, 還存在客戶端和服務(wù)器之間的字符集和校對規(guī)則設(shè)置钾菊。MySQL提供3個參數(shù)設(shè)置:
character_set_client
、character_set_connection
偎肃、character_set_results
分別代表客戶端煞烫、連接、返回結(jié)果的字符集累颂。通常不會單獨設(shè)置這3個參數(shù)滞详,可以通過命令:set names ***
來設(shè)置,還可以設(shè)置my.cnf中的default-character-set=utf-8
來設(shè)置紊馏。
MySQL字符集系統(tǒng)變量含義如下: