ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
fffe2c01 64646464 64646464 64646464 l .t,.dddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646464 l dddddddddddddddd
64646464 64646464 64646464 64646431 l ddddddddddddddd1
01060aa4 l ...¤
这些是row piece header
0401ff
其中
1个字节的flag=04
16进制4=二进制00000100=-----L--=last data piece
1个字节的lb(itl slot)=01
1个字节的cc column count=ff=255 (因为最后一列name500不为空,所以null都需要使用ff来表示)
总结,当超过了列的数量253,就会将row分裂为多个data piece 存放(类似row chain),每次还是使用1个字节的column count 来表示列的数量。
另外,最后一列的数据类型为varchar2(2000)
这里使用的是3个字节在存储它的长度
fe2c01
怎样计算呢?
使用后两个字节来表示
具体:
最后的1个字节表示256的个数比如这里为01 表示 256*1=256
再加上前一个字节的个数2c=44
256+44=300
估计fe是一个计算的标示符,因为没有找到相关资料,只能使用实验来证实了。
类似的,
253=fefd00
255=feff00
256=fe0001
257=fe0101
258=fe0201
259=fe0301
510=fefe01
512=fe0002
513=fe0102
2000=fed007
经过不断的实验测试得出
当length大于250的时候
就会使用3个字节类似于
fe fb00 来表示长度
length为250以及以下的长度
会以一个字节来表示长度
fe为长度位,后两位为长度值。因为是little endian 所以后两个字节需要颠倒过来
510=fefe01
512=fe0002
513=fe0102
其实是16进制
510=01fe
512=0200
513=0201
感谢擎天包的解答。