| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MySQL supports a number of column types, which may be grouped into three categories: numeric types, date and time types, and string (character) types. This section first gives an overview of the types available and summarizes the storage requirements for each column type, and then provides a more detailed description of the properties of the types in each category. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.
The column types supported by MySQL follow. The following code letters are used in the descriptions:
M
D
M-2.
Square brackets (`[' and `]') indicate parts of type specifiers that are optional.
Note that if you specify ZEROFILL for a column, MySQL
automatically adds the UNSIGNED attribute to the column.
Warning: You should be aware that when you use subtraction
between integer values where one is of type UNSIGNED, the result
will be unsigned! See section 12.5 Cast Functions.
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
A very small integer. The signed range is -128 to 127. The
unsigned range is 0 to 255.
BIT
BOOL
BOOLEAN
TINYINT(1).
The BOOLEAN synonym was added in version 4.1.0
Full boolean type handling will be introduced in accordance with SQL-99.
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
A small integer. The signed range is -32768 to 32767. The
unsigned range is 0 to 65535.
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
A medium-size integer. The signed range is -8388608 to
8388607. The unsigned range is 0 to 16777215.
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to
2147483647. The unsigned range is 0 to 4294967295.
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
This is a synonym for INT.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
-9223372036854775808 to
9223372036854775807. The unsigned range is 0 to
18446744073709551615.
Some things you should be aware of with respect to BIGINT columns:
BIGINT or DOUBLE
values, so you shouldn't use unsigned big integers larger than
9223372036854775807 (63 bits) except with bit functions! If you
do that, some of the last digits in the result may be wrong because of
rounding errors when converting the BIGINT to a DOUBLE.
MySQL 4.0 can handle BIGINT in the following cases:
BIGINT column.
MIN(big_int_column) and MAX(big_int_column).
+, -, *, etc.) where
both operands are integers.
BIGINT column by
storing it as a string. In this case, MySQL will perform a string-to-number
conversion that involves no intermediate double representation.
BIGINT arithmetic when
both arguments are integer values! This means that if you
multiply two big integers (or results from functions that return
integers) you may get unexpected results when the result is larger than
9223372036854775807.
FLOAT(precision) [UNSIGNED] [ZEROFILL]
A floating-point number. precision can be
<=24 for a single-precision floating-point number and between 25
and 53 for a double-precision floating-point number. These types are like
the FLOAT and DOUBLE types described immediately following.
FLOAT(X) has the same range as the corresponding FLOAT and
DOUBLE types, but the display size and number of decimals are undefined.
In MySQL Version 3.23, this is a true floating-point value. In
earlier MySQL versions, FLOAT(precision) always has 2 decimals.
Note that using FLOAT might give you some unexpected problems because
all calculations in MySQL are done with double precision.
See section A.5.6 Solving Problems with No Matching Rows.
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
A small (single-precision) floating-point number. Allowable values are
-3.402823466E+38 to -1.175494351E-38, 0,
and 1.175494351E-38 to 3.402823466E+38. If
UNSIGNED is specified, negative values are disallowed. The M
is the display width and D is the number of decimals. FLOAT
without arguments or FLOAT(X) (where X is in the range from
0 to 24) stands for a single-precision floating-point number.
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
A normal-size (double-precision) floating-point number.
Allowable values are -1.7976931348623157E+308 to
-2.2250738585072014E-308, 0, and
2.2250738585072014E-308 to 1.7976931348623157E+308. If
UNSIGNED is specified, negative values are disallowed. The
M is the display width and D is the number of decimals.
DOUBLE without arguments or FLOAT(X) (where X is in the
range from 25 to 53) stands for a double-precision floating-point number.
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]
These are synonyms for DOUBLE.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
An unpacked floating-point number. Behaves like a
CHAR column: "unpacked" means the number is stored as a string,
using one character for each digit of the value. The decimal point and,
for negative numbers, the `-' sign, are not counted in M (but
space for these is reserved). If D is 0, values will have no decimal
point or fractional part. The maximum range of DECIMAL values is
the same as for DOUBLE, but the actual range for a given
DECIMAL column may be constrained by the choice of M and
D. If UNSIGNED is specified, negative values are disallowed.
If D is omitted, the default is 0. If M is omitted, the
default is 10.
Prior to MySQL Version 3.23, the M argument must include the space
needed for the sign and the decimal point.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
These are synonyms for DECIMAL.
The FIXED alias was added in version 4.1.0 for compatibility
with other servers.
DATE
A date. The supported range is '1000-01-01' to '9999-12-31'.
MySQL displays DATE values in 'YYYY-MM-DD' format, but
allows you to assign values to DATE columns using either strings or
numbers. See section 11.2.2 The DATETIME, DATE, and TIMESTAMP Types.
DATETIME
A date and time combination. The supported range is '1000-01-01
00:00:00' to '9999-12-31 23:59:59'. MySQL displays
DATETIME values in 'YYYY-MM-DD HH:MM:SS' format, but allows you
to assign values to DATETIME columns using either strings or numbers.
See section 11.2.2 The DATETIME, DATE, and TIMESTAMP Types.
TIMESTAMP[(M)]
A timestamp. The range is '1970-01-01 00:00:00' to sometime in the
year 2037.
In MySQL 4.0 and earlier, TIMESTAMP values are displayed in
YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, or YYMMDD
format, depending on whether M is 14 (or missing), 12,
8, or 6, but allows you to assign values to TIMESTAMP
columns using either strings or numbers.
From MySQL 4.1, TIMESTAMP is returned as a string with the format
'YYYY-MM-DD HH:MM:SS'. If you want to have this as a number, you
should add +0 to the timestamp column. Different timestamp lengths are
not supported. From version 4.0.12, the --new option can be used
to make the server behave as in version 4.1.
A TIMESTAMP column is useful
for recording the date and time of an INSERT or UPDATE
operation because it is automatically set to the date and time of the most
recent operation if you don't give it a value yourself. You can also set it
to the current date and time by assigning it a NULL value.
See section 11.2 Date and Time Types.
The M argument affects only how a TIMESTAMP column is displayed;
its values always are stored using 4 bytes each.
Note that TIMESTAMP(M) columns where M is 8 or 14 are reported to
be numbers, whereas other TIMESTAMP(M) columns are reported to be
strings. This is just to ensure that you can reliably dump and restore
the table with these types!
See section DATETIME.
TIME
A time. The range is '-838:59:59' to '838:59:59'.
MySQL displays TIME values in 'HH:MM:SS' format, but
allows you to assign values to TIME columns using either strings or
numbers. See section TIME.
YEAR[(2|4)]
A year in 2- or 4-digit format (default is 4-digit). The allowable values
are 1901 to 2155, 0000 in the 4-digit year format,
and 1970-2069 if you use the 2-digit format (70-69). MySQL displays
YEAR values in YYYY format, but allows you to assign values to
YEAR columns using either strings or numbers. (The YEAR type is
unavailable prior to MySQL Version 3.22.) See section YEAR.
[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE]
A fixed-length string that is always right-padded with spaces to the
specified length when stored. The range of M is 0 to 255 characters
(1 to 255 prior to MySQL Version 3.23).
Trailing spaces are removed when the value is retrieved. CHAR values
are sorted and compared in case-insensitive fashion according to the
default character set unless the BINARY keyword is given.
From version 4.1.0, if the M value specified is greater than 255,
the column type is converted to TEXT.
This is a compatibility feature.
NATIONAL CHAR (or its equivalent short form, NCHAR) is the
SQL-99 way to define that a CHAR column should use the default
CHARACTER set. This is the default in MySQL.
CHAR is a shorthand for CHARACTER.
From version 4.1.0, the ASCII attribute can be specified which
assigns the latin1 character set to a CHAR column.
From version 4.1.1, the UNICODE attribute can be specified which
assigns the ucs2 character set to a CHAR column.
MySQL allows you to create a column of type
CHAR(0). This is mainly useful when you have to be compliant with
some old applications that depend on the existence of a column but that do not
actually use the value. This is also quite nice when you need a
column that can take only two values: A CHAR(0), that is not defined
as NOT NULL, will occupy only one bit and can take two values:
NULL or "". See section CHAR.
CHAR
CHAR(1).
[NATIONAL] VARCHAR(M) [BINARY]
A variable-length string. Note: Trailing spaces are removed when
the value is stored (this differs from the SQL-99 specification). The range
of M is 0 to 255 characters (1 to 255 prior to MySQL Version 4.0.2).
VARCHAR values are sorted and compared in case-insensitive fashion
unless the BINARY keyword is given. See section 13.2.5.1 Silent Column Specification Changes.
From version 4.1.0, if the M value specified is greater than 255,
the column type is converted to TEXT.
This is a compatibility feature.
VARCHAR is a shorthand for CHARACTER VARYING.
See section 11.3.1 The CHAR and VARCHAR Types.
TINYBLOB
TINYTEXT
A BLOB or TEXT column with a maximum length of 255 (2^8 - 1)
characters. See section 13.2.5.1 Silent Column Specification Changes. See section 11.3.2 The BLOB and TEXT Types.
BLOB
TEXT
A BLOB or TEXT column with a maximum length of 65535 (2^16 - 1)
characters. See section 13.2.5.1 Silent Column Specification Changes. See section 11.3.2 The BLOB and TEXT Types.
MEDIUMBLOB
MEDIUMTEXT
A BLOB or TEXT column with a maximum length of 16777215
(2^24 - 1) characters. See section 13.2.5.1 Silent Column Specification Changes. See section 11.3.2 The BLOB and TEXT Types.
LONGBLOB
LONGTEXT
A BLOB or TEXT column with a maximum length of 4294967295
or 4G (2^32 - 1) characters. See section 13.2.5.1 Silent Column Specification Changes.
Up to MySQL version 3.23 the server/client protocol and MyISAM tables had
a limit of 16M per communication packet / table row, from version 4.x
the maximum allowed length of LONGTEXT or LONGBLOB columns
depends on the configured maximum packet size in the client/server
protocol and available memory. See section 11.3.2 The BLOB and TEXT Types.
ENUM('value1','value2',...)
An enumeration. A string object that can have only one value, chosen
from the list of values 'value1', 'value2', ...,
NULL or the special "" error value. An ENUM can
have a maximum of 65535 distinct values. See section 11.3.3 The ENUM Type.
SET('value1','value2',...)
A set. A string object that can have zero or more values, each of which must
be chosen from the list of values 'value1', 'value2',
... A SET can have a maximum of 64 members. See section 11.3.4 The SET Type.
| 11.1 Numeric Types | ||
| 11.2 Date and Time Types | ||
| 11.3 String Types | ||
| 11.4 Choosing the Right Type for a Column | ||
| 11.5 Using Column Types from Other Database Engines | ||
| 11.6 Column Type Storage Requirements |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |