目次
git
概要
mysql通信メッセージ構造
ColumnDefinition パッケージ
ColumnCount パッケージ クラス
ホームページ データベース mysql チュートリアル ColumnDefinition パッケージと mysql プロトコルの解析コードの詳細

ColumnDefinition パッケージと mysql プロトコルの解析コードの詳細

Mar 07, 2017 pm 01:24 PM


git

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

概要

ColumnDefinitionパッケージは、サーバーがResultSetを返すときのパッケージの1つであり、結果セットを記述するために使用されます。フィールド情報。

mysql通信メッセージ構造

type name description
int ペイロード長 最下位バイト順に3が格納されるペイロードのテストとその 1 -バイトのシーケンス番号がメッセージヘッダー
int<1> シリアル番号
文字列 ペイロード メッセージ本文に結合され、長さは以前に指定されたペイロード長です

ColumnDefinition パッケージ

ペイロード

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 パッケージ クラス

/**
 * 
 * &lt;pre&gt;&lt;b&gt;column definition command packet.&lt;/b&gt;&lt;/pre&gt;
 * @author 
 * &lt;pre&gt;seaboat&lt;/pre&gt;
 * &lt;pre&gt;&lt;b&gt;email: &lt;/b&gt;849586227@qq.com&lt;/pre&gt;
 * &lt;pre&gt;&lt;b&gt;blog: &lt;/b&gt;http://www.php.cn/;/pre&gt;
 * @version 1.0
 * @see http://www.php.cn/
 */public class ColumnDefinitionPacket extends MySQLPacket {
    private static final byte[] DEFAULT_CATALOG = &quot;def&quot;.getBytes();    
    private static final byte NEXT_LENGTH = 0x0c;    
    private static final byte[] FILLER = { 00, 00 };    
    public byte[] catalog = DEFAULT_CATALOG;// always &quot;def&quot;
    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() &amp; 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 &amp; 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 &quot;MySQL Column Definition Packet&quot;;
    }

}
ログイン後にコピー

上記は、mysql プロトコルの ColumnDefinition パッケージの内容と解析コードの詳細です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

PHPのビッグデータ構造処理スキル

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか?

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか?

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? May 05, 2024 am 09:06 AM

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか?

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか?

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか?

PHP 配列ページングのパフォーマンス最適化戦略 PHP 配列ページングのパフォーマンス最適化戦略 May 02, 2024 am 09:27 AM

PHP 配列ページングのパフォーマンス最適化戦略

See all articles