135-1821-9792

mysql报文的格式和基本类型的示例分析

本篇文章给大家分享的是有关MySQL 报文的格式和基本类型的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

成都创新互联是一家集网站建设,西丰企业网站建设,西丰品牌网站建设,网站定制,西丰网站建设报价,网络营销,网络优化,西丰网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

navicat 和 mysql 是一对好基友,每天都有非常频繁的交流,主人在navicat上写下每条sql语句,轻轻的点了下执行按钮,navicat就飞快的把主人的指令传送到mysql那里,mysql立马把返回结果传回navicat那里显示给主人看。主人对他们的效率很满意,同时主人也有点好奇:你们两个基友是怎么通讯的呢?如果不通过navicat,我用程序直接和mysql交互该怎么做呢?

mysql 笑道:这是我们之间的秘密。。。

navicat有点不开心了:难道主人想抛弃我吗?呜呜呜。。。

主人安慰道:你想多了,我只是想更了解你们呀。

那我就给你详细讲讲我们之间的小秘密吧,mysql悠悠的说道:

想要通过我的交互,就得照我规定的格式来,不能每个人过来都讲自己的方言,我可听不懂,来到我的地盘就得按我的规矩来。

1.我给你发的报文都是这种格式的:

  服务器--->客户端的报文格式

mysql 报文的格式和基本类型的示例分析

  mysql 报文的格式和基本类型的示例分析

前面3个字节payload_length表示后面数据的实际长度,中间一个字节sequence_id表示报文的序号,从0开始,每次加1,最后的paylaod就是我发你的内容啦。

你可能也发现了,payload_length用3个字节表示,最大只能表示 224−1 bytes也是16M,如果报文大于或者等于16M那就要拆成2个报文了哦,

   比如刚好发送16M的报文:

ff ff ff 00 (数据域16M)...
00 00 00 01 (数据域为空)

   第二个报文的数据域是空的。

2.客户端发给我的报文也是要按照一定格式的哦:

客户端--->服务器的报文格式

mysql 报文的格式和基本类型的示例分析

   第一个字节表示命令的类型

 mysql 报文的格式和基本类型的示例分析

  mysql 报文的格式和基本类型的示例分析

mysql 报文的格式和基本类型的示例分析

后面的字节表示具体的命令,例如关闭连接的报文是长这样子滴:

 mysql 报文的格式和基本类型的示例分析 

这样规定好后,我们就有共同语言啦,就能听得懂对方在讲什么了,所以说有共同语言是很重要滴。

主人细细的回味了下mysql刚才说的话,发现还有个地方没弄明白问道:你发给我的报文中int<3>,string表示什么意思呀?

mysql忽然意识到还忘了说一件重要的事情:哎呦,我忘了和你说基本的数据类型了。

 mysql有2种基本的数据类型:

 Integers(整数型) 和 String(字符串)

Integers(整数型)分为定长的整数类型(Fixed-length integers)和变长的整数类型(Length-encoded integers)

1.定长的整数类型(Fixed-length integers)分别能表示1,2,3,4,6,8字节的长度:

   mysql 报文的格式和基本类型的示例分析int<1>表示占1个字节的长度, int<2>表示占2个字节的长度,以此类推,比如 int<3> 表示1是这么表示的:01 00 00   

对了,mysql协议中字节是按小头(LittileEndian)的方式表示的,低位的字节在前面,总体占3个字节,所以第一个字节是01,后面是00 00

2.变长的整数类型(Length-encoded integers)

mysql 报文的格式和基本类型的示例分析

  • 如果数字 < 251, 就用一个字节表示 = 1个字节 

  • 如果数字 ≥ 251 并且 < (216),就用 fc + 2个字节表示  = 3个字节 

  • 如果数字 ≥ (216) 并且 < (224),就用 fd + 3个字节表示  = 4个字节

  • 如果数字 ≥ (224) 并且 < (264) ,就用 fe + 8个字节表示  = 9个字节

主人表示很奇怪:一个字节最多能表示255个数,为什么不能直接表示到255?而是只表示到250?

mysql微微一笑道:因为251,252,253,254,255已经被我征用了哦,它们表示特殊的用途:

   251(fb):表示 NULL

   252(fc):表示数值的大小占后面的2个字节

   253(fd):表示数值的大小占后面的3个字节

   254(fe):表示数值的大小占后面的8个字节

   255(ff): 表示一个错误报文 ERR packet

下面说说String(字符串)类型:


1.变长的字符类型(LengthEncodedString):和上面变长整数类型是一样的,根据第一个字节的值判断所占字节的长度

2.定长的字符串类型(FixedLengthString):后面的数字表示字符串所占字节的长度

3.动态的计算长度(VariableLengthString):根据var动态的计算长度

4.包末端字符串方式(RestOfPacketString):没搞懂

5.空结尾的字符串类型(NulTerminatedString):字符串遇到 00 结束

原来如此,主人豁然开朗,看着navicat 和 mysql都亲切了许多,知道他们之间是怎么通话之后,一个邪恶的想法慢慢从心底升起,嘿嘿,那我不就可以监听他们之间的对话了嘛,哈哈哈哈哈哈哈哈。。。

以上就是mysql 报文的格式和基本类型的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


网页标题:mysql报文的格式和基本类型的示例分析
分享链接:http://kswsj.com/article/joidcs.html

其他资讯



Copyright © 2009-2022 www.kswsj.com 成都快上网科技有限公司 版权所有 蜀ICP备19037934号