mysql 中 utf8mb4 的存儲性質
在知乎的討論中,有人提出 MySQL 引入 utf8mb4 數據類型的原因。本文將探討 utf8mb4 的存儲特性,以回答此問題。
utf8mb3 與 utf8mb4 的存儲
MySQL 中原本的 utf8mb3 存儲字符集最多三個字節一個字符,而 utf8mb4 支持四個字節的存儲。
在之前,由于 MyISAM 存儲引擎是默認引擎,其具有靜態表格特性,使得 utf8mb3 的存儲長度固定為最長三個字節。然而,在 InnoDB 成為默認引擎后,此特性不再適用。因此,在所有引擎中,utf8mb4 的存儲長度都是可變的。
BMP 字符的存儲
在 Unicode 中,BMP(基本多語言平面)包含了絕大多數常見語言的常見字符。對于 BMP 字符,utf8mb3 和 utf8mb4 具有相同的存儲特性,長度為一到三個字節。這意味著在存儲 BMP 字符時,utf8mb4 并不會占據額外的存儲空間。
補充字符的存儲
除了 BMP 字符之外,Unicode 還包含一些補充字符,這些字符位于 BMP 之外。utf8mb3 無法存儲補充字符,而 utf8mb4 則可以。當將 utf8mb3 列轉換為 utf8mb4 列時,這些補充字符不會被轉換,因為 utf8mb3 中原本就不存在這些字符。
因此,utf8mb4 的存儲長度取決于存儲的字符集。對于 BMP 字符,它與 utf8mb3 長度相同。對于補充字符,它則需要四個字節的存儲空間。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END