2009년 3월 9일 월요일

가변크기일 경우의 MYD

가변 크기일 경우의 레코드 헤더는 다음과 같다. 
  • 헤더 시작마크(0x3000)
  • actual  length
  • unused length
  • flags + overflow pointer
actual length는  전 칼럼의 합계 바이트 수이다. 
unused length는  자신의 레코드 끝에서부터 다음의 레코드의 처음까지의 사이에 있는 미사용부분 바이트 수이다.  여기에 0x00이 채워져있다. 
actual length+unused length는 16진수로 자르기 좋은 수로 최소 16(10진수)가 된다. 

overflow pointer는 레코드가 연속되지 않는 여러 부분에 기록되어 있는 경우에 나머지가 기록되어 있는 위치를 나타낸다. 

헤더의 다음에는  각 컬럼의 값이 계속된다.  varchar()의 경우에는 값의 바이트수가 추가되고 그 뒤에 실제의 값이 들어가게 된다. 

MYD
mysql> create table dynamic(a varchar(3), b varchar(5) ) default charset=eucjpms;
mysql> insert into dynamic values( 'abc', 'def'),('ghi',NULL);

shell# hexdump -C dynamic.MYD
1레코드: 03 00 09 07 fc 03 62 62 63  03 64 65 66 00 00 00 00 00 00 00 
2레코드: 03 00 06 0a fe 03 67 68 69  00 00 00 00 00 00 00 00 00 00 00