第一个事件行基于复制声明要更改的表是如何定义的。
- TABLE_MAP_EVENT:
-
TABLE_MAP_EVENT定义了将要更改的表的结构。
- 有效载荷
-
Post-header: if post_header_len == 6 {4 table id} else {6 table id} 2 flags payload: 1 schema name length string schema name 1 [00] 1 table name length string table name 1 [00] lenent -int column-count string。var_len [length=$column-count] column-def lenent -str column-meta-def n NULL-bitmask, length: (column-count + 8) / 7
- 字段
-
table_id(6——数字表id
旗帜(2)——旗帜
schema_name_length(1)——模式名的长度
schema_name(string.var_len——[len=schema_name_length]模式名
table_name_length(1)——模式名的长度
table_name(string.var_len——[len=table_name_length]表名
column_count(lenenc_int)——表映射中的列数
column_type_def(string.var_len——[len=column_count]列定义数组,每个字段类型一个字节
column_meta_def(lenenc_str——每列的metainfo数组,length是metainfo-array的总长度(以字节为单位),每个metainfo字段的长度依赖于columns字段类型
null_bitmap(string.var_len——[len=(column_count + 8) / 7]
-
column_type_def
-
列定义。它作为长度编码字符串发送,其中字符串的长度是列的数量,它的每个字节是
协议::ColumnType
的列。 -
column_meta_def
-
每个列的特定于类型的元数据
类型
meta-len
2
2
2
1
2
2
1
1
2
看到
MYSQL_TYPE_ENUM
0
0
0
0
--
0
0
0
0
0
-
协议::MYSQL_TYPE_STRING
-
由于Bug37426字符串元数据的布局有点紧凑:
1 byte0 1 byte1
这两个字节编码
类型
而且长度
-
-
NULL-bitmap
-
位掩码包含可为每列设置的位集
零
.列长度取自column-def