3 回答

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

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

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