栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MySQL内核解析之二进制结果集协议分析 Binary ResultSet

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL内核解析之二进制结果集协议分析 Binary ResultSet

来源:

https://dev.mysql.com/doc/internals/en/binary-protocol-resultset.html

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包)

参考:https://dev.mysql.com/doc/internals/en/packet-EOF_Packet.html

00 00                number of warnings
02 00                status flag  0x0002 = **SERVER_STATUS_AUTOCOMMIT**
(A MySQL 4.1 EOF packet with: 0 warnings, AUTOCOMMIT enabled.)

ASCII对照表

分析3(列定义):

Protocol::ColumnDefinition41

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(值数据):

参考:https://blog.csdn.net/zhangh571354026/article/details/120437902?spm=1001.2014.3001.5501

00                                        这里没有NULL所以:(1+7+2)/ 8 = 1,(占用1个空间),(无表示,全0)
06                                        变长字段,lenenc_str = 6  
66 6f 6f 62 61 72                values=foobar
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269495.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号