1,MySQL在5.5.3之後加入了utf8mb4的編碼,mb4表示大部分字節4,專門用來兼容四字節unicode。
2.幸運的是,utf8mb4是utf8的超集,除了將編碼改為utf8mb4之外,不需要其他轉換。當然,為了節省空間,通常utf8就足夠了。
二、內容描述
1,上面說既然utf8可以存儲大部分漢字,為什麽要用utf8mb4?最初,mysql支持的utf8編碼的最大字符長度是3個字節。如果遇到4字節的寬字符,將插入壹個異常。
2.三字節的UTF-8能編碼的最大Unicode字符是0xffff,這是Unicode中的基本多語言平面(BMP)。
3.換句話說,任何不在基本多文本平面中的Unicode字符都不能存儲在Mysql的utf8字符集中。
4,包括表情符號表達式(表情符號是壹種特殊的Unicode編碼,常見於ios和android手機上),以及很多不常用的漢字,還有任何新的Unicode字符等。
第三,問題的根源
1.最初的UTF-8格式使用1到6個字節,最大編碼容量是31個字符。最新的UTF-8規範只使用壹到四個字節,最多可以編碼21比特,可以代表所有17個Unicode平面。
2.utf8是Mysql中的字符集,只支持最大長度為三個字節的UTF-8字符,這是Unicode中基本的多文本平面。
3.為什麽Mysql中的utf8只支持最多三個字節的UTF-8字符?可能是因為Mysql剛開發的時候Unicode還沒有輔助平面。
4.當時Unicode委員會還在夢想著“65535個字符足夠全世界用”。Mysql中的字符串長度是字符數而不是字節數。對於char數據類型,有必要為字符串保留足夠的長度。
5.使用utf8字符集時,要保留的長度是utf8的最長字符長度乘以string的長度,所以很自然地將utf8的最大長度限制為3。比如CHAR(100) Mysql會保留300字節的長度。
6.至於為什麽後續版本不支持長度為4字節的UTF-8字符,我覺得壹個是為了向後兼容,基本多語言平面之外的字符真的很少用。
7.在Mysql中保存長度為4字節的UTF-8字符,需要使用utf8mb4字符集,但只有5.5.3版本以後才支持(見版本:select version());)。
8.為了獲得更好的兼容性,您應該始終使用utf8mb4而不是utf8。對於CHAR類型的數據,utf8mb4會消耗更多的空間。按照Mysql官方的建議,用VARCHAR代替CHAR。