比如我如今执履行下面的语句:
Error 包
Error 包的重要构造:
相对包内容的地位 长度(字节) 名称 描述 0 1 包头标识 0xFF 代表这是一个Error 包 1 2 缺点代码 该缺点的响应缺点代码 3 1 标识位 SQL履行状况标识位,用'#'进行标识 4 5 履行状况 SQL的具体履行状况 9 msg_len 缺点信息 具体的缺点信息比如我们如今已经连接了数据库,履行
- use test_database;
然则我们数据库中并没有test_database这个数据库,我们将会获得响应的缺点信息,下面是我本机解析的Error packet包,仅供参考:
EOF Packet
EOF Packet是用于标识某个阶段数据停止的标记包,会在一下几种情况中产生:
- 结不雅集中字段信息停止的时刻;
- 结不雅集中列信息停止的时刻;
- 办事器确认停止办事的时刻;
- 客户端发送COM_SET_OPTION and COM_DEBUG敕令后,办事器回应的时刻;
- 办事器请求应用MySQL4.1版本之前的认证方法的时刻;
EOF 包的重要构造:
相对包内容的地位 长度(字节) 名称 描述 0 1 包头标识 0xFE 代表这是一个EOF 包 1 2 警告数 前次敕令引起的警告数 3 2 办事器状况这里要留意的一点,我们膳绫擎分析了Data Field的构造,发明它是用0xFE作为长度须要8个字节编码值得标识头,所以我们在断定一个包是否是EOF 包的时刻,须要下面两个前提:
- 标识头(第一个字节)为0xFE;
- 包的总长度小于9个字节;
Result Set包
Result Set包产生于我们每次数据库履行须要返回结不雅集的时刻,Server端发送给我们的包,比如平常的SELECT,SHOW等敕令,Result Set包比拟较较复杂,重要包含以下五个方面:
内容 含义 Result Set Header 返回数据的列数量 Field 返回数据的列信息若干好多个) EOF 列停止 Row Data 行数据若干好多个) EOF 数据停止我们逐个来分析,起首我们来看Result Set Header。
Result Set Header
Result Set Header表示返回数据的列数量以及一些额外的信息,其重要构造为:
长度 含义 1-9字节 数据的列数量(LengthEncodedInteger编码格局) 1-9字节 额外信息(LengthEncodedInteger编码格局)Field
Field表示Result Set中数据列的具体信息,可出现多次,具体次数取决于Result Set Header中数据的列数量,它的重要构造为:
长度 含义 4 平日为ASCIIz字符串def- | 数据库名称(Data Field)
- | 假如萌芽指定了表别号,就是表别号(Data Field)
- | 原始的表名(Data Field)
- | 假如萌芽指定了列别号,就是列别号(Data Field)
- | 原始的列名(Data Field)
1 | 标识位,平日为12,表示接下去的12个字节是具体的field内容
- PSOK{statementId=1, columns=5, parameters=1}
2 | field的编码
4 | field的长度
1 | field的类型
2 | field的标识
2 | field值的的小数点精度
2 | 预留字节
| 可选元素,如不雅存在,则表示该field的默认值
固然收集中的数据是用字节传输的,但它背后的数据源都是有类型的数据,MySQL协定也有根本的数据类型,比如Java中的8种根本数据类型,但MySQL协定中简单的多,它只有两种根本数据类型,分别为Integer(整型),String(字符串),下面我们就来看看这两种类型。
例子 解释
个中field的类型与标识具体定义和对应变量含义可参考这篇文┞仿:MySQL协定分析
EOF 包
数据库账户认证阶段
这里的EOF包是标识这列信息的停止,具体构造信息参考膳绫擎的EOF包解释。
Row Data
EOF 包
等待Row Data发送完之后,Server最后会向Client端发送一个EOF包,标识所有的行数据已经发送完毕。
PREPARE_OK包
PREPARE_OK包产生在Client端向Server发送预处理SQL语句,Server进行精确回应的时刻,大年夜家写写Java的时刻肯定用过PreparedStatement,这里PreparedStatement的功能就是进行SQL的预处理,预处理的长处比较多,比如效力高,防SQL注入等,有兴趣的同窗可以本身去进修下。下面是PREPARE_OK包的构造:
推荐阅读
CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了alter user user() identified by 'admin'; 这几天因为做项目须要,要应用MySQL数据库,应用的是MySQL Community Server 5.7.>>>详细阅读
本文标题:关于MySQL的网络协议分析
地址:http://www.17bianji.com/lsqh/39379.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示