快捷搜索:
来自 网络数据库 2019-09-01 08:44 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

mysql包基本格式

mysql交互左券是付出mysql周边组件常用的商业事务,如JDBC,libmysql等等。

在此大家要认知到mysql交互协议其实是半双工的交互公约,至于为什么,这里就先挖个小坑,现在再填。

在追究mysql交互公约的格式此前,大家要清理二个小标题,正是mysql交互合同会用到的主导数据类型。

1.大背头等级次序

此地的整数类型能够用来代表mysql数据类型中的整数类型、日期时间项目、DOUBLE、FLOAT类型、比特类型以及枚举类型等等。

持有的mysql整数类型都是小端的,那是网络数据的老规矩。即对于16进制数0x12345678,在存款和储蓄时会变成0x78563412

那么这里的整数数据类型有:int<len>(其中len = 1,2,3,4,6,8)以及可变的整数类型int<lenenc>

(1)int<len>是一直长度为len字节的大背头数据,如int<3>表示数字3的话,会以小端 0x0两千0表示。

(2)int<lenenc>是可变长度类型的整数,这种字符的尺寸可以是1, 3, 4, 9。

  大家设要表示的数值是n

      1)当 n < 251时,int<lenenc>会以int<1>表示。

  2)当251 <= n < 2^16时,int<lenenc>会以0xfc int<2>表示。

  3)当2^16 <= n < 2^24时,int<lenenc>会以0xfd int<3>表示。

  4)当2^24 <= n < 2^64时,int<lenenc>会以0xfe int<8>表示。

  那就象征一旦我们蒙受int<lenenc>类型,大家须求先读取第多个数值type来判断

  1)当type < 0xfb时,就认为读取的数是type。

  2)当type == 0xfc时,就读取后面包车型客车int<2>,int<2>才是实在的数值。

  3)当type == 0xfd时,就读取后边的int<3>,int<3>才是实事求是的数值。

  4)当type == 0xfe时,就读取后边的int<8>,int<8>才是实在的数值。

 那么当type为0xff和0xfb是如何?那边挖坑在此之后再填。

   能够剧透下的是:

   0xff在mysql交互公约中貌似代表某贰个动作错误,

   如发送一个安插命令退步后会有这种回复出现。

   而0xfb代表NULL,就是mysql插入值往往会是空值,指的正是NULL

2.字符串类型

此处的字符串类型能够用来表示mysql的高精度小数类型、字符串类型、大比特类型以及大整数类型等等。

此间的字符串类型首若是

(1)string<len>正是长度为len的字符串。

(2)string<NUL> 便是string '0x00',这里的'0x00'是用作结尾符的。

(3)string<lenenc>就是int<lenenc> string,int<lenenc> 代表字符串的尺寸。

(4)string<EOF>就是在四个mysql交互包结尾处出现的字符串。换言之,这几个字符串是叁个mysql交互包的末段多少个字符串。

(5)string<fix>和string<var>差不离用不到。

3.mysql包为主格式

mysql包长度 int<3> mysql包序号 int<1> mysql包内容 string<len>

 

 

mysql包长度正是mysql包内容的尺寸,不把湖州即包长度和包序号计入mysql包长度中,一般是int<3>,假设超过长度2^24-1,mysql会实行分包,如2^24-1,分成下述五个包。

0xfffffff 0x00 mysql包内容
0x000000 0x01 mysql包内容

 

 

 

mysql包序号便是一个完好无缺流程的发包序号,就是由该流程的产生的首先包是从0x00起首的,未来不管回复的包依然富含的包都会在地方加1,直到包序号达到0xff,再从0x001起始计数。

譬喻说自个儿要查询语句"select * from 某表",那么作者会发送出第叁个包蕴查询语句"select * from 某表"的mysql包给mysql数据库,那么些包的序号是0x00,那时,流程伊始,未来的mysql数据库回复的包都会从0x01起首计数,直到回复甘休,那时,该流程就身故了。作者要询问新的语句就代表新的流水生产线开头,mysql包序号计数重新从0x00开端。

 参谋网站 

             

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:mysql包基本格式

关键词: