我爱编程

[翻译]mysql通信协议(4)-Protocol Basics

2018-04-14  本文已影响0人  一滴水的坚持

官网地址:Protocol Basics


对于客户端发送给服务器的大多数命令,服务器会返回其中一个数据包作为响应:


OK_Packet

一个OK数据包从服务器发送到客户端,表示命令成功完成。
从MySQL 5.7.5开始,OK包也用于指示EOF,且EOF包被弃用。
如果设置了CLIENT_PROTOCOL_41,则数据包包含警告计数。

ok.png
这些规则区分数据包是代表OK还是EOF:

举个例子:

通过CLIENT_PROTOCOL_41确定。 0受影响的行,last-insert-id为0,启用AUTOCOMMIT,0警告。 没有更多信息。

07 00 00 02 00 00 00 02    00 00 00
回话状态信息

状态改变信息在OK数据包中作为状态改变块的数组发送,它由以下部分组成:


屏幕快照 2018-04-14 上午11.57.02.png

数据字段的解释取决于类型值:


ERR_Packet

该数据包表示发生了错误
如果启用了CLIENT_PROTOCOL_41,它将包含一个SQL状态值。
错误文本不能超过MYSQL_ERRMSG_SIZE.


屏幕快照 2018-04-14 下午12.11.46.png

举个例子:


屏幕快照 2018-04-14 下午12.12.31.png

EOF_Packet

如果启用CLIENT_PROTOCOL_41,则EOF数据包将包含警告计数和状态标志。
在MySQL客户端/服务器协议中,EOF_Packet和OK_Packet包服务于相同的目的,以标记查询执行结果的结束。 由于OK_Packet数据包中MySQL 5.7的变化(如会话状态跟踪),并为了避免重复EOF_Packet数据包中的更改,OK_Packet从MySQL 5.7.5开始已弃用。
EOF_Packet数据包可能出现在Protocol :: LengthEncodedInteger可能出现的地方。 您必须检查数据包长度是否小于9以确保它是EOF_Packet数据包。


EOF

举个例子:
一个MySQL 4.1 EOF包,包含:0个警告,启用AUTOCOMMIT。


屏幕快照 2018-04-14 下午12.18.22.png

Character Set 字符集

MySQL具有非常灵活的字符集支持,如字符集支持中所述。
字符集列表和它们的ID可以查询如下:

  SELECT id, collation_name FROM information_schema.collations ORDER BY id;
屏幕快照 2018-04-14 下午12.22.28.png

下表显示了一些常用字符集。


屏幕快照 2018-04-14 下午12.25.10.png
上一篇 下一篇

猜你喜欢

热点阅读