MySQL内核解析之二进制结果集协议分析 Binary ResultSet
01 00 00 01 01|1a 00 00 02 03 64 65 66 00 00 00 ..........def... 04 63 6f 6c 31 00 0c 08 00 06 00 00 00 fd 00 00 .col1........... 1f 00 00|05 00 00 03 fe 00 00 02 00|09 00 00 04 ................ 00 00 06 66 6f 6f 62 61 72|05 00 00 05 fe 00 00 ...foobar....... 02 00
拆分分析:
1、01 00 00 01 01 2、1a 00 00 02 03 64 65 66 00 00 00 04 63 6f 6c 31 00 0c 08 00 06 00 00 00 fd 00 00 1f 00 00 def :64 65 66 3、05 00 00 03 fe 00 00 02 00 EOF_Packet ============================================ 4、09 00 00 04 00 00 06 66 6f 6f 62 61 72 {Binary Protocol Resultset Row} foobar:66 6f 6f 62 61 72 URL 5、05 00 00 05 fe 00 00 02 00 EOF_Packet ============================================
从两次发送EOF分析:
第一轮:发送字段信息(元数据);
第二轮:发送相关数据(values);
分析1(列个数)
01 00 00 01 01 column_count = 01,列的个数为1
以此类推:
01 00 00 01 0c column_count = 0c,列的个数为12
分析3和5(EOF包)
参考:
00 00 number of warnings 02 00 status flag 0x0002 = **SERVER_STATUS_AUTOCOMMIT** (A MySQL 4.1 EOF packet with: 0 warnings, AUTOCOMMIT enabled.)
分析3(列定义):
03 变长字段: lenenc_str = 3,def 64 65 66 def catalog (always "def") 00 schema 00 table 00 org_table 04 变长字段: lenenc_str = 4 ,col1 63 6f 6c 31 col1,virtual column name 00 physical column name 0c length of the following fields (always 0x0c) = 以下是12个固定字段:长度不变,字节内容可变 08 00 latin1_swedish_ci (0x08) 06 00 00 00 maximum length of the field fd Protocol::MYSQL_TYPE_VAR_STRING (0xfd) 00 00 flags 1f for dynamic strings, double, float 00 00 filler [00] [00]
分析4(值数据):
参考:
00 这里没有NULL所以:(1+7+2)/ 8 = 1,(占用1个空间),(无表示,全0) 06 变长字段,lenenc_str = 6 66 6f 6f 62 61 72 values=foobar
下一篇:
IDEA的安装(包含破解)