String Types

TiDB supports all the MySQL string types, including CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, and SET. For more information, see String Types in MySQL.

Supported types

CHAR type

CHAR is a fixed length string. Values stored as CHAR are right-padded with spaces to the specified length. M represents the column-length in characters (not bytes). The range of M is 0 to 255:

[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

VARCHAR type

VARCHAR is a string of variable-length. M represents the maximum column length in characters (not bytes). The maximum size of VARCHAR cannot exceed 65,535 bytes. The maximum row length and the character set being used determine the VARCHAR length.

The space occupied by a single character might differ for different character sets. The following table shows the bytes consumed by a single character, and the range of the VARCHAR column length in each character set:

Character SetByte(s) per CharacterRange of the Maximum VARCHAR Column Length
ascii1(0, 65535]
latin11(0, 65535]
binary1(0, 65535]
utf83(0, 21845]
utf8mb44(0, 16383]
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

TEXT type

TEXT is a string of variable-length. M represents the maximum column length in characters, ranging from 0 to 65,535. The maximum row length and the character set being used determine the TEXT length.

TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

TINYTEXT type

The TINYTEXT type is similar to the TEXT type. The difference is that the maximum column length of TINYTEXT is 255.

TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

MEDIUMTEXT type

The MEDIUMTEXT type is similar to the TEXT type. The difference is that the maximum column length of MEDIUMTEXT is 16,777,215.

MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

LONGTEXT type

The LONGTEXT type is similar to the TEXT type. The difference is that the maximum column length of LONGTEXT is 4,294,967,295. But due to the limitation of txn-entry-size-limit, the maximum storage size of a single row in TiDB is 6 MiB by default and can be increased to 120 MiB by changing the configuration.

LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

BINARY type

The BINARY type is similar to the CHAR type. The difference is that BINARY stores binary byte strings.

BINARY(M)

VARBINARY type

The VARBINARY type is similar to the VARCHAR type. The difference is that the VARBINARY stores binary byte strings.

VARBINARY(M)

BLOB type

BLOB is a large binary file. M represents the maximum column length in bytes, ranging from 0 to 65,535.

BLOB[(M)]

TINYBLOB type

The TINYBLOB type is similar to the BLOB type. The difference is that the maximum column length of TINYBLOB is 255.

TINYBLOB

MEDIUMBLOB type

The MEDIUMBLOB type is similar to the BLOB type. The difference is that the maximum column length of MEDIUMBLOB is 16,777,215.

MEDIUMBLOB

LONGBLOB type

The LONGBLOB type is similar to the BLOB type. The difference is that the maximum column length of LONGBLOB is 4,294,967,295. But due to the limitation of txn-entry-size-limit, the maximum storage size of a single row in TiDB is 6 MiB by default and can be increased to 120 MiB by changing the configuration.

LONGBLOB

ENUM type

An ENUM is a string object with a value chosen from a list of permitted values that are enumerated explicitly in the column specification when the table is created. The syntax is:

ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name] # For example: ENUM('apple', 'orange', 'pear')

The value of the ENUM data type is stored as numbers. Each value is converted to a number according the definition order. In the previous example, each string is mapped to a number:

ValueNumber
NULLNULL
''0
'apple'1
'orange'2
'pear'3

For more information, see the ENUM type in MySQL.

SET type

A SET is a string object that can have zero or more values, each of which must be chosen from a list of permitted values specified when the table is created. The syntax is:

SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name] # For example: SET('1', '2') NOT NULL

In the example, any of the following values can be valid:

'' '1' '2' '1,2'

In TiDB, the values of the SET type is internally converted to Int64. The existence of each element is represented using a binary: 0 or 1. For a column specified as SET('a','b','c','d'), the members have the following decimal and binary values.

MemberDecimal ValueBinary Value
'a'10001
'b'20010
'c'40100
'd'81000

In this case, for an element of ('a', 'c'), it is 0101 in binary.

For more information, see the SET type in MySQL.