原文:http://www.chenyajun.com/2009/03/14/2472
虽然官方文档有,但还是决定实际看一个。
.frm文件用了存储表定义的文件
CREATE TABLE `0010_folder_1` ( `ufid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `email` VARCHAR(96) COLLATE utf8_general_ci NOT NULL DEFAULT '', `foldername` VARCHAR(64) COLLATE utf8_general_ci NOT NULL DEFAULT '', `total` INTEGER(10) UNSIGNED NOT NULL DEFAULT '0', `unread` INTEGER(10) UNSIGNED NOT NULL DEFAULT '0', `todo` INTEGER(10) UNSIGNED NOT NULL DEFAULT '0', `space` BIGINT(10) UNSIGNED NOT NULL DEFAULT '0', `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2', PRIMARY KEY (`ufid`), KEY `idxemail` (`email`(16)) )ENGINE=InnoDB AUTO_INCREMENT=66 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 先是 64 字节 的fileinfo 区域。这个和官方上基本一样。 fileinfo 0000000: fe 0000000: 01 0000002: 0a 0000003: 09 0000004: 03 0000005: 00 0000006: 0010 0000008: 0100 000000a: 0030 0000 000000e: c202 0000010: 0002 0000012: 0000 0000 0000016: 0000 0000 000001a: 00 000001b: 02 000001c: 3b00 000001e: 0900 0000020: 00 0000021: 05 0000022: 0000 0000 0000026: 21 0000027: 00 0000028: 00 0000029: 00 0000 0000 00 000002f: c2 0200 00 0000033: d2 c300 00 0000037: 10 0000 00 000003b: 00 00 000003d: 00 000003e: 0000 0000040: 2f2f 0000 2000 0000 0000 0000 0000 0000 0000050: 0000 0000 0000 0000 0000 0000 0000 0000 0000060: 0000 0000 0000 0000 0000 0000 0000 0000 ……… ……… ……… 0000fe0: 0000 0000 0000 0000 0000 0000 0000 0000 0000ff0: 0000 0000 0000 0000 0000 0000 0000 0000 然后是 key 定义部分 keybuff 0001000: 02 key 的数量 0001001: 02 构成 key 的字段总数 0001002: 0000 0001004: 1300 PRIMARY 和 idxemail 部分总长为 19 0001006: 0000 flags 0001008: 0800 key_length (ufid 8 bytes) 000100a: 01 key_parts 000100b: 00 algorithm 000100c: 0000 block_size 000100e: 0180 key_part->fieldnr+1+FIELD_NAME_USED (32768 + 1) 0001010: 0100 offset 0001012: 00 0001013: 42 00 key_type 0001015: 08 00 length 0001017: 29 00 flags 0001019: 30 00 key_length (email, 16 * 3 = 48) 000101b: 01 key_parts 000101c: 00 algorithm 000101d: 00 00 block_size 000101f: 02 80 32768 + 2 0001021: 09 00 offset (1 + 8 = 9) 0001023: 00 0001024: 0000 key_type 0001026: 3000 length 0001028: ff 0001029: 50 5249 4d41 5259 PRIMARY 0001030: ff 0001031: 69 6478 656d 6169 6c idxemail 0001039: ff 000103a: 00 000103b: 00 0000 0000 0001040: 0000 0000 0000 0000 0000 0000 0000 0000 0001050: 0000 0000 0000 0000 0000 0000 0000 0000 0001060: 0000 0000 0000 0000 0000 0000 0000 0000 0001070: 0000 0000 0000 0000 0000 0000 0000 0000 0001080: 0000 0000 0000 0000 0000 0000 0000 0000 ……… 00012c0: 0000 00012c2: 0000 0000 0000 0000 0000 0000 0000 ……… 00013b0: 0000 0000 0000 0000 0000 0000 0000 0000 00013c0: 0000 0000 0000 0000 0000 0000 0000 0000 00013d0: 0000 0000 0000 0000 0000 0000 0000 0000 00013e0: 0000 0000 0000 0000 0000 0000 0000 0000 00013f0: 0000 0000 0000 0000 0000 0000 0000 0000 ……… 0001470: 0000 0000 0000 0000 0000 0000 0000 0000 0001480: 0000 0000 0000 0000 0000 0000 0000 0000 0001490: 0000 0000 0000 0000 0000 0000 0000 0000 00014a0: 0000 0000 0000 0000 0000 0000 0000 0000 00014b0: 0000 0000 0000 0000 0000 0000 0000 0000 00014c0: 0002 00014c2: 0000 0600 4d79 4953 414d 0000 0000 00014d0: 0000 0000 0000 0000 0000 0000 0000 0000 00014e0: 0000 0000 0000 0000 0000 0000 0000 0000 00014f0: 0000 0000 0000 0000 0000 0000 0000 0000 0001500: 0000 0000 0000 0000 0000 0000 0000 0000 0001510: 0000 0000 0000 0000 0000 0000 0000 0000 0001520: 0000 0000 0000 0000 0000 0000 0000 0000 0001530: 0000 0000 0000 0000 0000 0000 0000 0000 0001540: 0000 0000 0000 0000 0000 0000 0000 0000 0001550: 0000 0000 0000 0000 0000 0000 0000 0000 ……… 00017c0: 0000 0000 0000 0000 0000 0000 0000 0000 00017d0: 0000 0000 0000 0000 0000 0000 0000 0000 ……… ……… ……… ……… ……… 0001ff0: 0000 0000 0000 0000 0000 0000 0000 0000 formhead 0002000: 5802 (后面的总长度为 600) 0002002: 0010 0000 0000 0000 0000 0000 0000 0002010: 0000 0000 0000 0000 0000 0000 0000 0000 0002020: 0000 0000 0000 0000 0000 0000 0000 0000 0002030: 0000 0000 0000 0000 0000 0000 0000 0000 0002040: 0000 0000 0000 0000 0000 0000 0000 0000 0002050: 0000 0000 0000 0000 0000 0000 0000 0000 0002060: 0000 0000 0000 0000 0000 0000 0000 0000 0002070: 0000 0000 0000 0000 0000 0000 0000 0000 0002080: 0000 0000 0000 0000 0000 0000 0000 0000 0002090: 0000 0000 0000 0000 0000 0000 0000 0000 00020a0: 0000 0000 0000 0000 0000 0000 0000 0000 00020b0: 0000 0000 0000 0000 0000 0000 0000 0000 00020c0: 0000 0000 0000 0000 0000 0000 0000 0000 00020d0: 0000 0000 0000 0000 0000 0000 0000 0000 00020e0: 0000 0000 0000 0000 0000 0000 0000 0000 00020f0: 0000 0000 0000 0000 0000 0000 0000 0000 0002100: 01 screens 0002101: 00 0002102: 0800 elements 0002104: 7b00 info_length 0002106: 1f02 totlength (543,所有字段长度) 0002108: 0000 no_empty 000210a: 0002 reclength (512) 000210c: 3500 n_length (53,2 + 所有字段名称长度 + 字段个数) 000210e :0000 int_count 0002110: 0000 int_parts 0002112: 0000 int_length 0002114: 0000 time_stamp_pos 0002116: 5000 80 0002118: 1600 22 000211a: 0000 null_fields 000211c: 0000 com_length 000211e: 0000 没搞清楚 screens 是干什么用的 screens 0002120: 7b length 0002121: 00 0002122: 09 fields_on_screen + 1 0002123: 08 fields_on_screen 0002124: 02 start_row-2 0002125: 14 cols >> 2 0002126: 29 (cols >> 1) +1 0002127: 20 2020 2020 2020 2020 0002130: 2020 2020 2020 2020 2020 2020 2020 2020 0002140: 2020 2020 2020 2020 2020 2020 2020 2000 0002150: 04 row 0002151: 00 0002152: 05 filed->field_name + 1 0002153: 75 6669 6400 ufid 0002158: 05 0002159: 00 000215a: 06 000215b: 65 6d61 696c00 0002161: 06 0002162: 00 0002163: 0b 0002164: 666f 6c64 6572 6e61 6d65 00 000216f: 07 0002170: 00 0002171: 06 0002172: 746f 7461 6c00 0002178: 08 0002179: 00 000217a: 07 000217b: 75 6e72 65616400 0002182: 09 0002183: 00 0002184: 05 0002185: 74 6f64 6f00 000218a: 0a 000218b: 00 000218c: 06 000218d: 73 70616365 00 0002193: 0b 0002194: 00 0002195: 05 0002196: 7479 7065 00 字段定义 pack_fields ufid 000219b: 04 row 000219c: 05 col 字段名字长度 + 1 000219d: 14 sc_length 000219e: 1400 length (20) 00021a0: 01 00 00 recpos 00021a3: 42 00 pack_flag 00021a5: 0f 00 unireg_check 00021a7: 00 interval_id 00021a8: 08 sql_type MYSQL_TYPE_LONGLONG 00021a9: 21 charset_number my_charset_utf8_general_ci 00021aa: 0000 comment_length email 00021ac: 05 00021ad: 06 00021ae: 49 sc_length 00021af: 2001 length (288) 00021b1: 09 0000 recpos (1 + 8 = 9) 00021b4: 0000 pack_flag 00021b6: 0000 unireg_check 00021b8: 00 interval_id 00021b9:0f sql_type MYSQL_TYPE_VARCHAR 00021ba:21 00021bb:00 00 foldername 00021bd:06 00021be:0b 00021bf: 44 sc_length 00021c0: c000 length (192) 00021c2: 2b01 00 recpos (299 = 9 + 96* 3 + 1 + 1) 00021c5: 00 00 pack_flag 00021c7: 00 00 unireg_check 00021c9: 00 interval_id 00021ca: 0f sql_type MYSQL_TYPE_VARCHAR 00021cb: 21 00021cc: 0000 total 00021ce: 07 00021cf: 06 00021d0: 0a sc_length 00021d1:0a 00 length (10) 00021d3: ec 0100 recpos (492 = 299 + 64*3 + 1) 00021d6: 1a00 pack_flag 00021d8: 0000 unireg_check 00021da: 00 interval_id 00021db: 03 sql_type MYSQL_TYPE_LONG 00021dc: 21 00021dd:00 00 unread 00021df: 08 00021e0: 07 00021e1: 0a sc_length 00021e2: 0a00 length (10) 00021e4: f001 00 recpos (496 = 492 + 4) 00021e7: 1a 00 pack_flag 00021e9: 00 00 unireg_check 00021eb: 00 interval_id 00021ec: 03 sql_type MYSQL_TYPE_LONG 00021ed: 21 00021ee: 0000 todo 00021f0: 09 00021f1: 05 00021f2: 0a sc_length 00021f3: 0a 00 length (10) 00021f5: f4 0100 recpos (500 = 496 + 4) 00021f8: 1a00 pack_flag 00021fa: 0000 unireg_check 00021fc: 00 interval_id 00021fd: 03 sql_type MYSQL_TYPE_LONG 00021fe: 21 00021ff: 00 00 Space 0002201: 0a 0002202: 06 0002203: 0a sc_length 0002204: 0a00 length (10) 0002206: f801 00 recpos (504 = 500 + 4) 0002209: 42 00 pack_flag 000220b: 00 00 unireg_check 000220d: 00 interval_id 000220e: 08 sql_type MYSQL_TYPE_LONGLONG 000220f: 21 0002210: 0000 type 0002212: 0b 0002213: 05 0002214: 03 sc_length 0002215: 03 00 length (3) 0002217: 00 0200 recpos (512 = 504 + 8) 000221a: 0a00 pack_flag 000221c: 0000 unireg_check 000221e: 00 interval_id 000221f: 01 sql_type MYSQL_TYPE_TINY 0002220: 21 0002221: 00 00 0002223: ff 0002224: 7566 6964 ff ufid 0002229: 65 6d61 696c ff email 000222f: 66 6f6c 6465 726e 616d 65ff foldername 000223a: 746f 7461 6cff total 0002240: 756e 7265 6164 ff unread 0002247: 74 6f64 6fff todo 000224c: 7370 6163 65ff space 0002252: 7479 7065 ff00 type