技术开发 频道

MYISAM 动态格式数据存储结构

  【IT168技术文档1.用单字段来分析行数据:

  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)

  ---------------------------------------------

0
相关文章