CHAR
and VARCHAR
Types
BLOB
and TEXT
Types
ENUM
Type
SET
Type
BLOB
and TEXT
Types
A BLOB
is a binary large object that can hold a variable amount of
data. The four BLOB
types TINYBLOB
, BLOB
,
MEDIUMBLOB
, and LONGBLOB
differ only in the maximum length of
the values they can hold.
See section 6.2.6 Column Type Storage Requirements.
The four TEXT
types TINYTEXT
, TEXT
, MEDIUMTEXT
,
and LONGTEXT
correspond to the four BLOB
types and have the
same maximum lengths and storage requirements. The only difference between
BLOB
and TEXT
types is that sorting and comparison is performed
in case-sensitive fashion for BLOB
values and case-insensitive fashion
for TEXT
values. In other words, a TEXT
is a case-insensitive
BLOB
. No case conversion takes place during storage or retrieval.
If you assign a value to a BLOB
or TEXT
column that exceeds
the column type's maximum length, the value is truncated to fit.
In most respects, you can regard a TEXT
column as a VARCHAR
column that can be as big as you like. Similarly, you can regard a
BLOB
column as a VARCHAR BINARY
column. The differences are:
BLOB
and TEXT
columns with
MySQL Version 3.23.2 and newer. Older versions of
MySQL did not support this.
BLOB
and TEXT
columns
when values are stored, as there is for VARCHAR
columns.
BLOB
and TEXT
columns cannot have DEFAULT
values.
From version 4.1.0, LONG
and LONG VARCHAR
map to the
MEDIUMTEXT
data type. This is a compatibility feature.
MyODBC
defines BLOB
values as LONGVARBINARY
and
TEXT
values as LONGVARCHAR
.
Because BLOB
and TEXT
values may be extremely long, you
may run up against some constraints when using them:
GROUP BY
or ORDER BY
on a BLOB
or
TEXT
column, you must convert the column value into a fixed-length
object. The standard way to do this is with the SUBSTRING
function. For example:
mysql> SELECT comment FROM tbl_name,SUBSTRING(comment,20) AS substr -> ORDER BY substr;If you don't do this, only the first
max_sort_length
bytes of the
column are used when sorting. The default value of max_sort_length
is
1024; this value can be changed using the -O
option when starting the
mysqld
server. You can group on an expression involving BLOB
or
TEXT
values by specifying the column position or by using an alias:
mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM tbl_name GROUP BY 2; mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM tbl_name GROUP BY b;
BLOB
or TEXT
object is determined by its
type, but the largest value you can actually transmit between the client and
server is determined by the amount of available memory and the size of the
communications buffers. You can change the message buffer size
(max_allowed_packet
), but you must
do so on both the server and client ends. See section 5.5.2 Tuning Server Parameters.
Note that each BLOB
or TEXT
value is represented
internally by a separately allocated object. This is in contrast to all
other column types, for which storage is allocated once per column when
the table is opened.