mysql协议学习(三)--OK报文

来源:互联网 发布:php微信订餐系统源码 编辑:程序博客网 时间:2024/05/16 06:46

Payload of OK Packet

TypeNameDescriptionint<1>header[00] or [fe] the OK packet headerint<lenenc>affected_rowsaffected rowsint<lenenc>last_insert_idlast insert-idif capabilities & CLIENT_PROTOCOL_41 {  int<2>status_flagsStatus Flags  int<2>warningsnumber of warnings} elseif capabilities & CLIENT_TRANSACTIONS {  int<2>status_flagsStatus Flags}if capabilities & CLIENT_SESSION_TRACK {  string<lenenc>infohuman readable status information  if status_flags & SERVER_SESSION_STATE_CHANGED {    string<lenenc>session_state_changessession state info  }} else {  string<EOF>infohuman readable status information}
对于执行成功的命令,通常会返回OK报文

OK报文和EOF报文的区别
对于OK报文和EOF报文,其header字段都可能为0xfe,那么有如下规则来区分这两种报文
OK Packet:length of packet > 7
EOF Packet:length of packet < 9

eg:

OK with CLIENT_PROTOCOL_41. 0 affected rows, last-insert-id was 0, AUTOCOMMIT enabled, 0 warnings. No further info.

07 00 00 0200000002    0000 00
...........

Status Flags说明:
FlagValueCommentSERVER_STATUS_IN_TRANS0x0001a transaction is activeSERVER_STATUS_AUTOCOMMIT0x0002auto-commit is enabledSERVER_MORE_RESULTS_EXISTS0x0008

SERVER_STATUS_NO_GOOD_INDEX_USED0x0010

SERVER_STATUS_NO_INDEX_USED0x0020

SERVER_STATUS_CURSOR_EXISTS0x0040Used by Binary Protocol Resultset to signal thatCOM_STMT_FETCH must be used to fetch the row-data.SERVER_STATUS_LAST_ROW_SENT0x0080

SERVER_STATUS_DB_DROPPED0x0100

SERVER_STATUS_NO_BACKSLASH_ESCAPES0x0200

SERVER_STATUS_METADATA_CHANGED0x0400

SERVER_QUERY_WAS_SLOW0x0800

SERVER_PS_OUT_PARAMS0x1000

SERVER_STATUS_IN_TRANS_READONLY0x2000in a read-only transactionSERVER_SESSION_STATE_CHANGED0x4000connection state information has changed

Session State Information
该部分信息由以下部分组成:
TypeNameDescriptionint<1>typetype of datastring<lenenc>datadata of the changed session info
其中type有3种,分别是:

types of State Change Information

NameValueDescriptionSESSION_TRACK_SYSTEM_VARIABLES0x00one or more system variables changed. See also:session_track_system_variablesSESSION_TRACK_SCHEMA0x01schema changed. See also: session_track_schemaSESSION_TRACK_STATE_CHANGE0x02"track state change" changed. See also:session_track_state_change
不同type类型对应的data组成是不同的

SESSION_TRACK_SYSTEM_VARIABLES 对应的data字段内容
TypeNameDescriptionstring<lenenc>namename of the changed system variablestring<lenenc>valuevalue of the changed system variable
eg:
SET autocommit = OFF
00 0f 0a 61 75 74 6f 63   6f 6d 6d 69 7403 4f 4646
....autocommit.OFF
第1个字节00表示type=SESSION_TRACK_SYSTEM_VARIABLES,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节0f表示接下来的字符串长度为15个字节(0x0f = 15),而SESSION_TRACK_SYSTEM_VARIABLES的data字段又分为两个字段 name(string<lenenc>)和 value(string<lenenc>),那么接下来的 0a 61 75 74 6f 63 6f 6d 6d 69 74 (len = 0x0a) 和 03 4f 46 46 (len = 0x03)则分别为name字段和value字段的内容。

SESSION_TRACK_SCHEMA 对应的data字段内容
TypeNameDescriptionstring<lenenc>namename of the changed schema
eg:
USE test
01 05 04 74 65 73 74
...test
第1个字节01表示type=SESSION_TRACK_SCHEMA,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节05表示接下来的字符串长度为5个字节,data字段内容为 04 74 65 73 74(len = 0x04)


SESSION_TRACK_STATE_CHANGE 对应的data字段内容

备注:A flag byte that indicates whether session state changes occurred. This flag is represented as an ASCII value
TypeNameDescriptionstring<lenenc>is_tracked[31] ("1") if state tracking got enabled.
0 0
原创粉丝点击