官网地址:Protocol Basics
这是对MySQL协议使用的基本构建块的描述:
- Basic Data Types 基础数据类型 String integer
- MySQL Packets mysql的数据包
- Generic Response Packets通用的数据包
- Character Set字符集
Basic Data Types基础数据类型
在整个协议中使用的基本类型有:
- Integer Types 数字类型
- String Types 字符类型
Integer Types 数字类型
mysql通信协议有一系列编码方式对数字类型。
-
Protocol::FixedLengthInteger
一个固定长度的无符号将其值存储在最少的字节中。
MySQL使用以下固定长度的无符号整数:- int<1>: 1 byte Protocol::FixedLengthInteger.
- int<2>: 2 byte Protocol::FixedLengthInteger. See int2store()
- int<3>: 3 byte Protocol::FixedLengthInteger. See int3store()
- int<4>: 4 byte Protocol::FixedLengthInteger. See int4store()
- int<6>: 6 byte Protocol::FixedLengthInteger. See int6store()
- int<8>: 8 byte Protocol::FixedLengthInteger. See int8store()
-
Protocol::LengthEncodedInteger
长度编码的整数类型
根据其数值,将数值转换为长度编码的整数,占用1,3,4或9个字节的整数
.png
同样,要将长度编码的整数转换为其数值,请检查第一个字节。
警告:
如果数据包的第一个字节是长度编码的整数并且其字节值为0xFE,则必须检查数据包的长度以验证它是否有足够的空间存储8个字节的整数。 如果不是,它可能是一个EOF_Packet。
String Types 字符类型
字符串是字节序列,且以协议中的以下几种类型出现。
-
Protocol::FixedLengthString
固定长度的字符串具有已知的硬编码长度。
举个例子:ERR_Packet数据包一直是5 bytes长度。 -
Protocol::NullTerminatedString
以00字节结尾的字符串。 -
Protocol::VariableLengthString
字符串的长度由另一个字段确定或在运行时计算 -
Protocol::LengthEncodedString
长度编码的字符串是以描述字符串长度的长度编码的整数,作为前缀的字符串。 -
Protocol::RestOfPacketString
如果一个字符串是数据包的最后,它的长度可以从总包长度减去当前位置计算得出。
网友评论