mysql 的 UTF8MB4 不是定長(zhǎng)存儲(chǔ)
眾所周知,MySQL 中的 UTF8MB4 數(shù)據(jù)類型用于存儲(chǔ)Unicode字符,但它是否是定長(zhǎng)存儲(chǔ)呢?
答案是:否。UTF8MB4 是變長(zhǎng)的,這意味著存儲(chǔ)字符所需的字節(jié)數(shù)根據(jù)字符的編碼值而變化。
即使在選擇了 UTF8MB4 數(shù)據(jù)類型的情況下,存儲(chǔ)單個(gè)英文字母(如“a”)時(shí),它仍然只占用一個(gè)字節(jié)。這與原本的 UTF8MB3 數(shù)據(jù)類型一致,后者也被設(shè)計(jì)為變長(zhǎng)的。
UTF8MB4 中的“MB”代表“最多字節(jié)”,意味著它最多可以使用四個(gè)字節(jié)來(lái)存儲(chǔ)單個(gè)字符。對(duì)于常見的單詞和短語(yǔ),通常只需要一個(gè)或兩個(gè)字節(jié)。但是,對(duì)于某些輔助字符,如表情符號(hào),就需要四個(gè)字節(jié)。
因此,雖然 MySQL 引入了 UTF8MB4 數(shù)據(jù)類型,但它并不是為了取代 UTF8MB3,而是為了提供一種存儲(chǔ)更廣泛 Unicode 字符集(包括輔助字符)的方式。這提高了存儲(chǔ)非拉丁文字或特殊字符的能力,同時(shí)仍保持存儲(chǔ)效率。