utf8和utf8mb4的區(qū)別

一、基礎(chǔ)知識(shí)(bit vs byte vs word)

字? ? ?word?

字節(jié)? byte (B)

位? ? ?bit (b)

1字節(jié) = 8位(1 byte = 8bit)

1字 = 2字節(jié)(1 word = 2 byte)

一個(gè)漢字 = 2字節(jié)?

中文標(biāo)點(diǎn) = 三個(gè)字節(jié)

一個(gè)英文字母 = 一個(gè)字節(jié)

英文標(biāo)點(diǎn) = 一個(gè)字節(jié)

Emoji表情或者某些特殊字符 = 4個(gè)字節(jié)

二、基礎(chǔ)知識(shí)(Unicode vs ASCII

因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte)。一個(gè)字節(jié)能表示的最大的整數(shù)就是255(2^8-1=255),而ASCII編碼,占用0 - 127用來(lái)表示大小寫(xiě)英文字母、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼,比如大寫(xiě)字母A的編碼是65,小寫(xiě)字母z的編碼是122。

如果要表示中文,顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié),而且還不能和ASCII編碼沖突,所以,中國(guó)制定了GB2312編碼,用來(lái)把中文編進(jìn)去。

類(lèi)似的,日文和韓文等其他語(yǔ)言也有這個(gè)問(wèn)題。為了統(tǒng)一所有文字的編碼,Unicode應(yīng)運(yùn)而生。Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問(wèn)題了。

Unicode通常用兩個(gè)字節(jié)表示一個(gè)字符,原有的英文編碼從單字節(jié)變成雙字節(jié),只需要把高字節(jié)全部填為0就可以。

三、utf8 vs utf8mb4

1.utf8

是針對(duì)Unicode的一種可變長(zhǎng)度字符編碼。由于對(duì)可以用ASCII表示的字符使用UNICODE并不高效,因?yàn)閁NICODE比ASCII占用大一倍的空間,而對(duì)ASCII來(lái)說(shuō)高字節(jié)的0對(duì)他毫無(wú)用處。為了解決這個(gè)問(wèn)題,就出現(xiàn)了一些中間格式的字符集,他們被稱為通用轉(zhuǎn)換格式,即UTF(Unicode Transformation Format)。原來(lái)mysql支持的 utf8 編碼最大字符長(zhǎng)度為 3 字節(jié),如果遇到 4 字節(jié)的寬字符就會(huì)插入異常了。三個(gè)字節(jié)的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)。其中包含了ASCII編碼,Unicode 和 部分超出Unicode的相關(guān)文字,并對(duì)他們進(jìn)行最大三字節(jié)可變長(zhǎng)度的二進(jìn)制編碼。

2.utf8mb4(mb4 = most bytes 4)

所以u(píng)tf8是utf8mb4的子集,除了將編碼改為utf8mb4外不需要做其他轉(zhuǎn)換。而在各類(lèi)符號(hào)文字逐步發(fā)展的過(guò)程中,像是包括 Emoji 表情(Emoji 是一種特殊的 Unicode 編碼,常見(jiàn)于 ios 和 android 手機(jī)上),和很多不常用的漢字,以及任何新增的 Unicode 字符等等都需要進(jìn)行編碼,所以u(píng)tf8mb4應(yīng)運(yùn)而生,這也是兩者最本質(zhì)的區(qū)別。

相關(guān)文章(https://blog.csdn.net/qq_37054881/article/details/90023611

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容