char与varchar占用_MySQL笔记

char与varchar占用

广义上,char(m) 占用那个字节,varchar(m) 最多占用 m 个字节,由占用字节和记录长度的字节组成。

ps:以下皆在使用 InnoDB 时,在 COMPACT 格式下的情况

varchar(m) 与 varchar(2m)的区别

InnoDB行格式类型(Compact格式)

Compact行格式示意图:

img

图片来自Mysql compact行格式_千百元的博客-CSDN博客_compact行格式

varchar 占用构成

varchar是变长字段,由真正的数据内容和该数据占用的字节数组成。

而数据占用的字节数存储在变长字段列表如(下图), ps:这个长度在变长字段列表逆序存放。

varchar(m) 长度在变长字段列表的占用

varchar(m) 允许占用 m * n (n 取决于编码字符集使用多少个字节表示一个字符), 当其实际占用 i 个字节时

1
2
3
4
1. m * n <= 255 其在变长字段列表占用1个字节
2. m * n > 255 && i <= 127, 其在变长字段列表占用1个字节
3. m * n > 255 && i > 127, 其在变长字段列表占用2个字节
123

char(m) 一定是占用 m 个字节吗?

仅当使用定长编码字符集(如 ascii )的时候,才是固定占用m个字节。

当使用变长编码字符集的时候,会像 varchar 一样在变长字段长度列表中存储占用的字节长度。例如:当使用 utf8 字符集的时候,varchar(m) 占用字节长度在m3m。(utf8表示一个字符占用13个字节)。


char与varchar占用_MySQL笔记
http://lanfunoe.site/2022/11/06/char与varchar占用-MySQL笔记/
作者
John Doe
发布于
2022年11月6日
许可协议