3.小结:
3.1 如果是一个新行:
每行至少分配14个字节+头6个=20个B,如果超过14个B,按实际需要分配.
行数据的格式为:
---------------------------------------------
03 (LEN:1B): start of header - Block type, see mi_dynrec.c, _mi_get_block_info()
00 03 (LEN:2B): actual length (varchar存储的空间为; 实际字符长度+2)
0d (LEN:1B): 分配给该行的空间中,未使用的字节数
00 fe (LEN:XB): flags (0 表示不为空,1表示为空) (这里是一个字节还是两个字节,根据.FRM定义取得)
--数据部分:
--第一个字段:
01 (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
如果是固定长度类型的数据,则没有这个标识.
DATA (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
--第二个字段:
...
--第三个字段:
...
00 (LEN:XB): 未使用的空间(长度根据第三个标识定)
---------------------------------------------
3.2 如果是一个被更新过并且产生了链接的行:
3.2.1 行数据的格式为:
--------------------------------------------------------
05 (LEN:1B): 只要发生行链接type就会变成05
00 16 (LEN:1B): 实际字符长度 = 20+2= 22
00 (LEN:1B): 未使用的空间: 0 B
07 00 00 00 00 00 00 00 3c (LEN:9B): 行数据的链接地址
fe (LEN:XB): flags (0 表示不为null,1表示为null)
-- 数据部分:
--第一个字段:
14 (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
如果是固定长度类型的数据,则没有这个标识.
DATA (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
--第二个字段:
...
---------------------------------------------------------
3.2.2 并且,链接部分的数据格式为:
--------------------------------------------------------
09 : 类型: 代表这是链接数据
00 16 : 该段实际字符长度
02 : 分配给链接行的空间中,未使用的空间: 2 B
-- 数据部分:
第一个字段:
14 (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
如果是固定长度类型的数据,则没有这个标识.
DATA (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
第二个字段:
...
00 : 未使用的空间
XXX : 下一行
---------------------------------------------------------
3.3 被删除的行:
如果该行被删除了,那么该行的TYPE=00,然后数据部分都会被置为FF;