最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql协议的ColumnDefinition包及解析代码详情

来源:动视网 责编:小采 时间:2020-11-09 09:09:20
文档

mysql协议的ColumnDefinition包及解析代码详情

mysql协议的ColumnDefinition包及解析代码详情:githttps://github.com/sea-boat/mysql-protocol概况ColumnDefinition包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的字段信息。mysql通信报文结构类型名字描述int<3>payload长度按照the least signif
推荐度:
导读mysql协议的ColumnDefinition包及解析代码详情:githttps://github.com/sea-boat/mysql-protocol概况ColumnDefinition包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的字段信息。mysql通信报文结构类型名字描述int<3>payload长度按照the least signif


git

https://github.com/sea-boat/mysql-protocol

概况

ColumnDefinition包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的字段信息。

mysql通信报文结构

类型名字描述
int<3>payload长度按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头
int<1>序列号
stringpayload报文体,长度即为前面指定的payload长度

ColumnDefinition包

Payload

lenenc_str catalog
lenenc_str schema
lenenc_str table
lenenc_str org_table
lenenc_str name
lenenc_str org_name
lenenc_int length of fixed-length fields [0c]2 
character set4 
column length1 
type2 
flags1 
decimals2 
filler [00] [00] if command was COM_FIELD_LIST {
lenenc_int 
length of default-valuesstring[$len] 
default values
 }

更多详情 : http://dev.mysql.com/doc/internals/en/com-query-response.html#column-definition

ColumnCount包类

/**
 * 
 * <pre><b>column definition command packet.</b></pre>
 * @author 
 * <pre>seaboat</pre>
 * <pre><b>email: </b>849586227@qq.com</pre>
 * <pre><b>blog: </b>http://www.gxlcms.com/;/pre>
 * @version 1.0
 * @see http://www.gxlcms.com/
 */public class ColumnDefinitionPacket extends MySQLPacket {
 private static final byte[] DEFAULT_CATALOG = "def".getBytes(); 
 private static final byte NEXT_LENGTH = 0x0c; 
 private static final byte[] FILLER = { 00, 00 }; 
 public byte[] catalog = DEFAULT_CATALOG;// always "def"
 public byte[] schema; 
 public byte[] table; 
 public byte[] orgTable; 
 public byte[] name; 
 public byte[] orgName; 
 public byte nextLength = NEXT_LENGTH;// always 0x0c
 public int charsetSet; 
 public long length; 
 public int type; 
 public int flags; 
 public byte decimals; 
 public byte[] filler = FILLER; 
 public byte[] defaultValues; 
 public void read(byte[] data) {
 MySQLMessage mm = new MySQLMessage(data); 
 this.packetLength = mm.readUB3(); 
 this.packetId = mm.read(); 
 this.catalog = mm.readBytesWithLength(); 
 this.schema = mm.readBytesWithLength(); 
 this.table = mm.readBytesWithLength(); 
 this.orgTable = mm.readBytesWithLength(); 
 this.name = mm.readBytesWithLength(); 
 this.orgName = mm.readBytesWithLength(); 
 this.nextLength = mm.read(); 
 this.charsetSet = mm.readUB2(); 
 this.length = mm.readUB4(); 
 this.type = mm.read() & 0xff; 
 this.flags = mm.readUB2(); 
 this.decimals = mm.read(); 
 this.filler = mm.readBytes(2); 
 if (mm.hasRemaining()) { 
 this.defaultValues = mm.readBytesWithLength();
 }
 } @Override
 public void write(ByteBuffer buffer) { 
 int size = calcPacketSize();
 BufferUtil.writeUB3(buffer, size);
 buffer.put(packetId);
 BufferUtil.writeWithLength(buffer, catalog, (byte) 0);
 BufferUtil.writeWithLength(buffer, schema, (byte) 0);
 BufferUtil.writeWithLength(buffer, table, (byte) 0);
 BufferUtil.writeWithLength(buffer, orgTable, (byte) 0);
 BufferUtil.writeWithLength(buffer, name, (byte) 0);
 BufferUtil.writeWithLength(buffer, orgName, (byte) 0);
 buffer.put(NEXT_LENGTH);
 BufferUtil.writeUB2(buffer, charsetSet);
 BufferUtil.writeUB4(buffer, length);
 buffer.put((byte) (type & 0xff));
 BufferUtil.writeUB2(buffer, flags);
 buffer.put(decimals);
 buffer.put(FILLER); 
 if (defaultValues != null) { 
 //only use for show columns
 BufferUtil.writeWithLength(buffer, defaultValues);
 }
 } @Override
 public int calcPacketSize() { 
 int size = (catalog == null ? 1 : BufferUtil.getLength(catalog));
 size += (schema == null ? 1 : BufferUtil.getLength(schema));
 size += (table == null ? 1 : BufferUtil.getLength(table));
 size += (orgTable == null ? 1 : BufferUtil.getLength(orgTable));
 size += (name == null ? 1 : BufferUtil.getLength(name));
 size += (orgName == null ? 1 : BufferUtil.getLength(orgName));
 size += 13; if (defaultValues != null) {
 size += BufferUtil.getLength(defaultValues);
 } 
 return size;
 } 
 @Override
 protected String getPacketInfo() { 
 return "MySQL Column Definition Packet";
 }

}

文档

mysql协议的ColumnDefinition包及解析代码详情

mysql协议的ColumnDefinition包及解析代码详情:githttps://github.com/sea-boat/mysql-protocol概况ColumnDefinition包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的字段信息。mysql通信报文结构类型名字描述int<3>payload长度按照the least signif
推荐度:
标签: 协议 详细 mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top