mysql中不同的編碼格式之間的區(qū)別是:ASCII編碼直接將字符在編碼字符集中的序號作為字符在計(jì)算機(jī)中存儲(chǔ)從數(shù)值;Latin1編碼,它是ASCII編碼的擴(kuò)展;UTF-8編碼是一種針對Unicode的可變長度字符編碼。
本篇文章將對mysql的一些編碼進(jìn)行講解與介紹,不過這并不是所有的字符集編碼。
推薦課程:mysql視頻教程
1、字符集簡介
字符(Character)是各種文字和符號的總稱,包括各國家文字、標(biāo)點(diǎn)符號、圖形符號、數(shù)字等。
字符集(Character set)是多個(gè)字符的集合,字符集種類較多,每個(gè)字符集包含的字符個(gè)數(shù)不同,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。計(jì)算機(jī)要準(zhǔn)確的處理各種字符集文字,需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識別和存儲(chǔ)各種文字。
字符編碼(Character encoding)是把字符集中的某個(gè)字符編碼為指定字符集中字符,以便文本在計(jì)算機(jī)中存儲(chǔ)和通過通信網(wǎng)絡(luò)的傳遞。常見的例子包括將拉丁字母表編碼成ASCII,ASCII將字母、數(shù)字和其它符號編號,并用7比特的二進(jìn)制來表示。
字符序(collation)是指同一個(gè)字符集內(nèi)字符之間的比較規(guī)則。只有確定字符序后,才能在一個(gè)字符集上定義什么是等價(jià)的字符,以及字符之間的大小關(guān)系。一個(gè)字符可以包含多種字符序。MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)的字符集名稱開頭,以國家名居中(或以general居中),以ci、cs、或bin結(jié)尾。以ci結(jié)尾的字符序表示大小寫不敏感,以cs結(jié)尾的字符序表示大小寫敏感,以bin結(jié)尾的字符序表示按二進(jìn)制編碼值比較。
2、ASCII編碼
ASCII既是編碼字符集,又是字符編碼,ASCII直接將字符在編碼字符集中的序號作為字符在計(jì)算機(jī)中存儲(chǔ)從數(shù)值。
例如:在ASCII中A字符在表中排第65位,序號是65,而編碼后A的數(shù)值是0100 0001,即十進(jìn)制的65的二進(jìn)制轉(zhuǎn)換結(jié)果。
3、Latin1字符集
Latin1字符集在ASCII字符集基礎(chǔ)上進(jìn)行了擴(kuò)展,仍然使用一個(gè)字節(jié)表示字符,但啟用了高位,擴(kuò)展了字符集的表示范圍。
4、UTF-8編碼
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創(chuàng)建。現(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1到6個(gè)字節(jié)編碼Unicode字符。
UTF-8是一種變長字節(jié)編碼方式。對于某一個(gè)字符的UTF-8編碼,如果只有一個(gè)字節(jié)則其最高二進(jìn)制位為0;如果是多字節(jié),其第一個(gè)字節(jié)從最高位開始,連續(xù)的二進(jìn)制位值為1的個(gè)數(shù)決定了其編碼的位數(shù),其余各字節(jié)均以10開頭。UTF-8最多可用到6個(gè)字節(jié)。 如表:?
1字節(jié) 0xxxxxxx?
2字節(jié) 110xxxxx 10xxxxxx?
3字節(jié) 1110xxxx 10xxxxxx 10xxxxxx?
4字節(jié) 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx?
5字節(jié) 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx?
6字節(jié) 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx?
因此UTF-8中可以用來表示字符編碼的實(shí)際位數(shù)最多有31位,即上表中x所表示的位。除去控制位(每字節(jié)開頭的10等),x表示的位與UNICODE編碼是一一對應(yīng)的,位高低順序也相同。?
實(shí)際將UNICODE轉(zhuǎn)換為UTF-8編碼時(shí)應(yīng)先去除高位0,然后根據(jù)所剩編碼的位數(shù)決定所需最小的UTF-8編碼位數(shù)。 因此基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一個(gè)字節(jié)的UTF-8編碼(7個(gè)二進(jìn)制位)便可以表示。