MySQL内部手册/.../ 活动内容的书写规范

20.7.1事件内容编写约定

使用以下约定编写事件内容:

  • 除非另有说明,数字以小端序格式写入(最低有效字节优先)。

  • 表示位置或长度的值以字节为单位给出,应该被认为是无符号的。

  • 有些数字被写成包装整数。格式将在本节后面介绍。

  • 字符串被写成不同的格式:

    • 可以将字符串写入固定长度的字段,并在右侧使用空填充(0x00字节)。

    • 可变长度字符串的前面可以有一个长度字段,表示字符串的长度。

    • 一些变长字符串以空结尾;不为外人所知。对单个字符串字段的描述指明了情况。

    • 对于前面有长度字段的以空结束的字符串,长度不包括结束的空字节,除非另有说明。

    • 如果在事件的末尾有一个可变长度的字符串,并且在它之前没有长度字段,那么它的长度可以确定为事件长度减去事件中其他字段的长度。

有些事件使用wrapped Integers,这是一种有效表示无符号整数的特殊格式。包装整数具有存储最多8字节整数的能力,而小整数仍然可以使用1、3或4字节。根据下表,第一个字节的值决定了如何读取该数字。

第一个字节

格式

0 - 250

第一个字节是数字(范围为0-250)。不使用额外的字节。

252

又使用了两个字节。这个数字的范围是251-0xffff。

253

又使用了三个字节。该数字的范围是0xffff-0xffffff。

254

使用了8个字节。数字的取值范围是0xffffff-0xffffffffffffffff。

打包整数格式源自MySQL客户端/服务器网络协议中使用的“长度编码二进制”表示。这种表示允许第一个字节值251来表示SQL NULL值,但是251显然没有用于二进制日志中的wrapped Integers。