mysql 中的 UTF8MB4 是否是定長(zhǎng)存儲(chǔ)?
在得知 MySQL 引入了 UTF8MB4 數(shù)據(jù)類型后,不禁發(fā)問(wèn):如果我使用了 UTF8MB4,但在其中僅存儲(chǔ)了幾個(gè)字母(例如:“abc”),這些字母在存儲(chǔ)時(shí)將占用 3 個(gè)字節(jié)還是 12 個(gè)字節(jié)?
答案:
UTF8MB4 是一種變長(zhǎng)存儲(chǔ)字符集。“MB”表示“Most Bytes”,即“最多字節(jié)”。這表明 UTF8MB4 字符集使用可變數(shù)量的字節(jié)來(lái)存儲(chǔ)字符,具體取決于字符的編碼。
對(duì)于包含在基本多語(yǔ)言平面上(BMP)的字符(即大多數(shù)常見(jiàn)語(yǔ)言中的常見(jiàn)字符),UTF8MB4 和 UTF8MB3 使用相同的存儲(chǔ)方式,即使用 1 到 3 個(gè)字節(jié)。但是,對(duì)于超出 BMP 范圍的字符(即補(bǔ)充字符),UTF8MB4 則需要 4 個(gè)字節(jié)來(lái)存儲(chǔ),而 UTF8MB3 無(wú)法存儲(chǔ)這種字符。
因此,“abc”三個(gè)字母在 UTF8MB4 中將占用 3 個(gè)字節(jié),而不是 12 個(gè)字節(jié)。