Resultset row
A resultset row represents a database resultset unit, which is usually generated by executing a statement that queries the database. Using COM_STMT_EXECUTE the resultsetrow will be in binary format, others in text format.
Text resultset row
- for each column
- string<lenenc> column data
The byte representation of the string according to client character collation.
Binary resultset row
- byte<1> 0x00 header
- byte<(number_of_columns + 7) / 8> NULL-Bitmap
- for each column
- if column value is not null
- if MYSQL_TYPE_DOUBLE type : DOUBLE Binary encoding
- if MYSQL_TYPE_LONGLONG type : BIGINT Binary encoding
- if MYSQL_TYPE_INTEGER type : INTEGER Binary encoding
- if MYSQL_TYPE_MEDIUMINT type : MEDIUMINT Binary encoding
- if MYSQL_TYPE_FLOAT type : FLOAT Binary encoding
- if MYSQL_TYPE_SMALLINT type : SMALLINTBinary encoding
- if MYSQL_TYPE_YEAR type : YEAR Binary encoding
- if MYSQL_TYPE_TINYINT type : TINYINT Binary encoding
- if MYSQL_TYPE_DATE type : DATE Binary encoding
- if MYSQL_TYPE_TIMESTAMP type : TIMESTAMP Binary encoding
- if MYSQL_TYPE_DATETIME type : TIMESTAMP Binary encoding
- if MYSQL_TYPE_TIME type : TIME Binary encoding
- if MYSQL_TYPE_NEWDECIMAL type : DECIMAL Binary encoding
- if MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_BLOB, MYSQL_TYPE_GEOMETRY,MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VAR_STRING): byte<lenenc> value
- if column value is not null
NULL-Bitmap values
The NULL-Bitmap indicates if a parameter for a column is null (one bit per parameter) beginning with the 3rd bit. NULL-bitmap size is (number_of_columns + 7) / 8.
DECIMAL Binary encoding.
DECIMAL has no fixed size, so will be encoded as string<lenenc>. An DECIMAL(10,2) with a value of -15.5 is stored as
06 45 49 53 46 53 48 . - 1 5 . 5 0
DOUBLE binary encoding
DOUBLE is the IEEE 754 floating-point value in Little-endian format on 8 bytes.
BIGINT binary encoding
BIGINT is the value in Little-endian format on 8 bytes. Signed is defined by the Column field detail flag.
INTEGER binary encoding
INTEGER is the value in Little-endian format on 4 bytes. Signed is defined by the Column field detail flag.
MEDIUMINT binary encoding
MEDIUMINT is similar to INTEGER binary encoding, even if MEDIUM int is 3-bytes encoded server side. (Last byte will always be 0x00).
FLOAT binary encoding
FLOAT is the IEEE 754 floating-point value in Little-endian format on 4 bytes.
SMALLINT binary encoding
SMALLINT is the value in Little-endian format on 2 bytes. Signed is defined by the Column field detail flag.
YEAR binary encoding
YEAR uses the same format as SMALLINT.
TINYINT binary encoding
TINYINT is the value of 1 byte. Signed is defined by the Column field detail flag.
DATE binary encoding
DATE uses the same format as TIMESTAMP binary encoding, with a data length of 0 for the special '0000-00-00' value and 4 for the standard year/month/day format
TIMESTAMP binary encoding
Data is encoded in 8 bytes without fractional seconds, 12 bytes with fractional seconds.
byte position | description |
1 | data length : 0 for special '0000-00-00 00:00:00' value. 4 with year + month + day of month only 7 for timestamps without fractional seconds 11 with fractional seconds |
2-3 | year on 2 bytes little-endian format |
4 | Month ( 1=january) |
5 | days of month |
6 | hour of day (0 if DATE type) |
7 | minutes (0 if DATE type) |
8 | secondes (0 if DATE type) |
9-12 | micro-second on 4 bytes little-endian format (only if data-length is > 7) |
TIME binary encoding
Data is encoded in 9 bytes without fractional seconds, 13 bytes with fractional seconds.