MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。
数值类型
类型 |
字节 |
最小值 |
最大值 |
|
|
(带符号的/无符号的) |
(带符号的/无符号的) |
TINYINT |
1 |
-128 |
127 |
|
|
0 |
255 |
SMALLINT |
2 |
-32768 |
32767 |
|
|
0 |
65535 |
MEDIUMINT |
3 |
-8388608 |
8388607 |
|
|
0 |
16777215 |
INT |
4 |
-2147483648 |
2147483647 |
|
|
0 |
4294967295 |
BIGINT |
8 |
-9223372036854775808 |
9223372036854775807 |
|
|
0 |
18446744073709551615 |
表示时间值的DATE和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个“零”值
列类型 |
“零”值 |
DATETIME |
'0000-00-00 00:00:00' |
DATE |
'0000-00-00' |
TIMESTAMP |
00000000000000 |
TIME |
'00:00:00' |
YEAR |
0000 |
字符串类型的存储需求
列类型 |
存储需求 |
CHAR(M) |
M个字节,0 <= M <= 255 |
VARCHAR(M) |
L+1个字节,其中L <= M 且0 <= M <= 65535(参见下面的注释) |
BINARY(M) |
M个字节,0 <= M <= 255 |
VARBINARY(M) |
L+1个字节,其中L <= M 且0 <= M <= 255 |
TINYBLOB, TINYTEXT |
L+1个字节,其中L < 28 |
BLOB, TEXT |
L+2个字节,其中L < 216 |
MEDIUMBLOB, MEDIUMTEXT |
L+3个字节,其中L < 224 |
LONGBLOB, LONGTEXT |
L+4个字节,其中L < 232 |
ENUM('value1','value2',...) |
1或2个字节,取决于枚举值的个数(最多65,535个值) |
SET('value1','value2',...) |
1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员) |
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,存储需要5个字节。
对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。
ARCHAR列的有效最大长度为65,532字符。