MySQL 8.3.0
Source Code Documentation

An OK packet is sent from the server to the client to signal successful completion of a command.

As of MySQL 5.7.5, OK packets are also used to indicate EOF, and EOF packets are deprecated.

if CLIENT_PROTOCOL_41 is set, the packet contains a warning count.

The Payload of an OK Packet
int<1> header 0x00 or 0xFE the OK packet header
int<lenenc> affected_rows affected rows
int<lenenc> last_insert_id last insert-id
if capabilities & CLIENT_PROTOCOL_41 {
int<2> status_flags SERVER_STATUS_flags_enum
int<2> warnings number of warnings
} else if capabilities & CLIENT_TRANSACTIONS {
int<2> status_flags SERVER_STATUS_flags_enum
if capabilities & CLIENT_SESSION_TRACK
string<lenenc> info human readable status information
string<lenenc> session state info Session State Information
} else {
string<EOF> info human readable status information

These rules distinguish whether the packet represents OK or EOF:

  • OK: header = 0 and length of packet > 7
  • EOF: header = 0xfe and length of packet < 9

To ensure backward compatibility between old (prior to 5.7.5) and new (5.7.5 and up) versions of MySQL, new clients advertise the CLIENT_DEPRECATE_EOF flag:

  • Old clients do not know about this flag and do not advertise it. Consequently, the server does not send OK packets that represent EOF. (Old servers never do this, anyway. New servers recognize the absence of the flag to mean they should not.)
  • New clients advertise this flag. Old servers do not know this flag and do not send OK packets that represent EOF. New servers recognize the flag and can send OK packets that represent EOF.


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

07 00 00 02 00 00 00 02 00 00 00

Session State Information

State-change information is sent in the OK packet as a array of state-change blocks which are made up of:

Layout of Session State Information
int<1> type type of data. See enum_session_state_type
string<lenenc> data data of the changed session info

Interpretation of the data field depends on the type value:


string<lenenc> name name of the changed system variable
string<lenenc> value value of the changed system variable


After a SET autocommit = OFF statement:

00 00 0f1 0a 61 75 74 6f 63 6f 6d 6d 69 74 03 4f 46 46
constexpr value_type autocommit
Definition: classic_protocol_constants.h:151


string<lenenc> name name of the changed schema


After a USE test statement:

01 00 05 04 74 65 73 74


A flag byte that indicates whether session state changes occurred. This flag is represented as an ASCII value.

string<lenenc> is_tracked 0x31 ("1") if state tracking got enabled.


After a SET SESSION session_track_state_change = 1 statement:

03 02 00 01 31

See also net_send_ok()