帝国行业网站模板,中国万网张向东,咨询管理,网站的建设公司哪家好1. MySQL中的NULL值是怎么存放的#xff1f; MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列#xff0c;NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间#xff0c;当表中所有字段都被定义成NOT NULL#xff0c;行格式中就不会有NULL值…1. MySQL中的NULL值是怎么存放的 MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间当表中所有字段都被定义成NOT NULL行格式中就不会有NULL值列表可节省1字节空间 【1字节8位每位用0或1填充0代表不是NULL1代表为NULL用0补齐成8位当列较多时NULL值列表占用的字节空间可变。】 2.MySQL怎么知道varchar(n)实际占用数据的大小 MySQL的Compact行格式中会用【变长字段长度列表】存储变长字段实际占用的数据大小。 3.varchar(n)中n最大取值为多少 一行记录最大能存储65535字节的数据但这个是包含【变长字段字节数列表所占用的字节数】和【NULL值列表所占用的字节数】。所以在算varchar(n)中最大值时需要减去这两个列表所占用的字节数。 如果一张表只有一个varchar(n)字段且允许为NULL字符集为ascii。varchar(n)中n最大取值为65536-变长字段字节数列表所占用的字节数-null值列表所占用的字节数65535-2-1【65532】。 如果有多个字段的话要保证所有字段的长度变长字段字节数列表所占用的字节数NULL值列表所占用的字节数65535。 4.行溢出后MySQL是怎么处理的 如果一个数据页存不了一条记录InnoDB存储引擎会自动将溢出的数据存放在【溢出页】中。 Compact行格式当发生行溢出时在记录的真实数据处只会保存该的一部分数据剩余数据放在【溢出页】中然后真实数据处用【20字节】存储指向溢出页的地址从而找到剩余数据所在的页。 Compressed和Dynamic两种格式采用【完全的行溢出】方式记录的真实数据处不会存储该列的一部分数据只存储20个字节的指针来指向溢出页。实际的数据全部存储在溢出页中。