TEXT
Syntax
TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
Description
A TEXT
column with a maximum length of 65,535
(216 - 1
)
characters. The effective maximum length is less if the value contains
multi-byte characters. Each TEXT
value is stored using a two-byte length
prefix that indicates the number of bytes in the value. If you need a bigger storage, consider using MEDIUMTEXT instead.
An optional length M
can be given for this type. If this is done, MariaDB
creates the column as the smallest TEXT
type large enough to hold values
M
characters long.
Currently, all MariaDB collations are of type PADSPACE, meaning that TEXT (as well as VARCHAR and CHAR values) are compared without regard for trailing spaces. This does not apply to the LIKE pattern-matching operator, which takes into account trailing spaces.
Before MariaDB 10.2.1, BLOB
and TEXT
columns could not be assigned a DEFAULT
value. This restriction was lifted in MariaDB 10.2.1.
Examples
Trailing spaces:
CREATE TABLE strtest (d TEXT(10)); INSERT INTO strtest VALUES('Maria '); SELECT d='Maria',d='Maria ' FROM strtest; +-----------+--------------+ | d='Maria' | d='Maria ' | +-----------+--------------+ | 1 | 1 | +-----------+--------------+ SELECT d LIKE 'Maria',d LIKE 'Maria ' FROM strtest; +----------------+-------------------+ | d LIKE 'Maria' | d LIKE 'Maria ' | +----------------+-------------------+ | 0 | 1 | +----------------+-------------------+
Difference between VARCHAR and TEXT
- VARCHAR columns can be fully indexed.
TEXT
columns can only be indexed over a specified length.
For storage engine developers
- Internally in the full length of the VARCHAR ciolumn is allocated inside each TABLE objects record[] structure. As there are 3 such buffers, each open table will 3 times max-length-to-store-varchar bytes of memory.
TEXT
andBLOB
columns are stored with a pointer (4 or 8 bytes) + a 1-4 byte length. TheTEXT
data is only stored once. This means that internallyTEXT
uses less memory for each open table but has instead the additional overhead that eachTEXT
object needs to be allocated & freed for each row access (with some caching in between).