BINARY

Fixed-length binary string type. This type stores a fixed number of bytes, padding with zero bytes if the data is shorter.

This page describes the BINARY data type. For details about the operator, see Binary Operator.

Syntax

BINARY(M)

Description

The BINARY type is similar to the CHAR type, but stores binary byte strings rather than non-binary character strings. M represents the column length in bytes.

It contains no character set, and comparison and sorting are based on the numeric value of the bytes.

If the maximum length is exceeded, and SQL strict mode is not enabled , the extra characters will be dropped with a warning. If strict mode is enabled, an error will occur.

BINARY values are right-padded with 0x00 (the zero byte) to the specified length when inserted. The padding is not removed on select, so this needs to be taken into account when sorting and comparing, where all bytes are significant. The zero byte, 0x00 is less than a space for comparison purposes.

Use Cases for Zero Length

A BINARY(0) or VARBINARY(0) column is restricted to an empty byte string or NULL.

  • Schema Preservation: Use these columns when a system expects a specific column to exist, but no data storage is required for your current application.

  • Space-Efficient Indicators: These columns can act as a two-state indicator where the presence of an empty byte string represents one state and NULL represents another.

If you attempt to insert a value other than an empty string, MariaDB returns an ERROR 1406 (22001) indicating the data is too long for the column.

Examples

Inserting too many characters, first with strict mode off, then with it on:

Sorting is performed with the byte value:

Using CAST to sort as a CHAR instead:

The field is a BINARY(10), so padding of two '\0's are inserted, causing comparisons that don't take this into account to fail:

Example of BINARY:

Data Too Long

When SQL_MODE is strict (the default), a value is considered "too long" when its length exceeds the size of the data type, and an error is generated.

Example of data too long behavior for BINARY:

See Also

This page is licensed: GPLv2, originally from fill_help_tables.sqlarrow-up-right

spinner

Last updated

Was this helpful?