分类: Mysql/postgreSQL
2009-05-31 10:24:17
1.1 建立测试数据
drop table if exists heyf_5 ;
create table heyf_5 (name varchar(50)) type myisam ;
insert into heyf_5 values ('a'),('b'),('c');
[root@alisoft-test1 test]# system hexdump /opt/mysql/data/test/heyf_5.MYD
--------------------------------------------------
0000000 0003 0d03 01fe 0061 0000 0000 0000 0000
0000010 0000 0000 0003 0d03 01fe 0062 0000 0000
0000020 0000 0000 0000 0000 0003 0d03 01fe 0063
0000030 0000 0000 0000 0000 0000 0000
000003c
1.2 开始分析数据
ROW1: 0003 0d03 01fe 0061 0000 0000 0000 0000 0000 0000
ROW2: 0003 0d03 01fe 0062 0000 0000 0000 0000 0000 0000
ROW3: 0003 0d03 01fe 0063 0000 0000 0000 0000 0000 0000
------------------------------
我们拿第一行数据来分析:
由于数据在里时,双字节是低位先存储,高位后存储.所以我们读数据的时候要反过来一下:
ROW1: 03 00 03 0d fe 01 61 00 ...
其中:
---------------------------------------------
03 : start of header - Block type, see mi_dynrec.c, _mi_get_block_info()
00 03 : actual length (varchar存储的空间为; 实际字符长度+2)
0d : usused length
fe : flags (0 表示不为空,1表示为空)
01 : 该行中该字段实际数据的长度(变长字段才有)
61 : 实际存储的数据值: 'a'
00 : 未使用的空间(包括到下一行前的所有00)
---------------------------------------------