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 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 value
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. 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.
int<1> data length: 0 for special '00:00:00' value, 8 without fractional seconds, 12 with fractional seconds
This page is licensed: CC BY-SA / Gnu FDL
Last updated
Was this helpful?