3 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
UTF-8是可變長(zhǎng)度編碼。在UTF-8的情況下,這意味著存儲(chǔ)一個(gè)代碼點(diǎn)需要一到四個(gè)字節(jié)。但是,名為“utf8”(別名為“utf8mb3”)的MySQL編碼每個(gè)代碼點(diǎn)最多只能存儲(chǔ)三個(gè)字節(jié)。
因此字符集“utf8”/“utf8mb3”不能存儲(chǔ)所有Unicode代碼點(diǎn):它只支持0x000到0xFFFF的范圍,稱為“ 基本多語(yǔ)言平面 ”。另請(qǐng)參見(jiàn)Unicode編碼的比較。
這是MySQL文檔必須說(shuō)明的(同一頁(yè)面的先前版本):
名為utf8 [/ utf8mb3]的字符集每個(gè)字符最多使用三個(gè)字節(jié),僅包含BMP字符。從MySQL 5.5.3開(kāi)始,utf8mb4字符集每個(gè)字符最多使用四個(gè)字節(jié),支持補(bǔ)充字符:
對(duì)于BMP字符,utf8 [/ utf8mb3]和utf8mb4具有相同的存儲(chǔ)特性:相同的代碼值,相同的編碼,相同的長(zhǎng)度。
對(duì)于補(bǔ)充字符,utf8 [/ utf8mb3]根本不能存儲(chǔ)字符,而utf8mb4需要四個(gè)字節(jié)來(lái)存儲(chǔ)它。由于utf8 [/ utf8mb3]根本無(wú)法存儲(chǔ)字符,因此在utf8 [/ utf8mb3]列中沒(méi)有任何補(bǔ)充字符,并且在升級(jí)舊版本的utf8 [/ utf8mb3]數(shù)據(jù)時(shí)無(wú)需擔(dān)心轉(zhuǎn)換字符或丟失數(shù)據(jù)MySQL的。
因此,如果您希望列支持存儲(chǔ)位于BMP之外的字符(通常是您想要的),例如表情符號(hào),請(qǐng)使用“utf8mb4”。另請(qǐng)參見(jiàn)實(shí)際使用中最常見(jiàn)的非BMP Unicode字符是什么?。

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
的utf8mb4
,因?yàn)楝F(xiàn)在我們需要為存儲(chǔ)不僅語(yǔ)言文字,而且是符號(hào),新引進(jìn)的表情符號(hào),支持,等等字符集是非常有用的。
如何在 Mathias Bynens中支持MySQL數(shù)據(jù)庫(kù)中的完整Unicode,這也很好地解讀了這一點(diǎn)

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
utf8mb4
:Unicode字符集的UTF-8編碼,每個(gè)字符使用一到四個(gè)字節(jié)。
utf8mb3
:Unicode字符集的UTF-8編碼,每個(gè)字符使用一到三個(gè)字節(jié)。
在MySQL的 utf8
是目前的別名utf8mb3
,其已被棄用,并且將在未來(lái)被刪除的MySQL版本。屆時(shí)utf8
將成為參考 utf8mb4
。
因此,無(wú)論這個(gè)別名如何,您都可以有意識(shí)地為自己設(shè)置utf8mb4
編碼。
添加回答
舉報(bào)