数据类型是定义列中可以存储什么数据以及该数据实际怎样存储的基本规则,MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。
一、字符串数据类型
有两种基本的字符串类型,分别为定长字符串和变长字符串,定长串接受长度固定的字符串,其长度是在创建表时指定的。变长串存储可变长度的文本。有些变长数据类型具有最大的定长,而有些则是完全变长的。
数据类型 | 说明 |
char(n) | 1~255个字符的定长字符串。它的长度必须在创建时指定,否则MySQL假定为CHAR(1) |
varchar(n) | 长度可变字符串,最多不超过65535字节。如果在创建时指定为varchar(n),则可存储0到n个字符的变长字符串(其中n≤65535) |
text | 可变长度,最大长度为65535字节的变长文本 |
tinytext | 可变长度,最大长度为255字节 |
mediumtext | 可变长度,最大长度为16K |
logntext | 可变长度,最大长度为4GB |
二、日期和时间数据类型
数据类型 | 取值范围 | 格式 |
DATE | 1000-01-01~9999-12-31 | YYYY-MM-DD |
DATETIME | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
TIME | -838:59:59 ~ 838:59:59 | HH:MM:SS |
YEAR | 1901 ~ 2155 | YYYY |
TIMESTAMP | 1980-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | YYYY-MM-DD HH:MM:SS |
TIME 类型的取值范围为 -838:59:59~838:59:59,小时部分如此大的原因是 TIME 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负)。
三、数值类型
3.1 整数类型
数据类型 | 说明 | 存储需求 |
TINYINT | -128〜127 | 0 〜255 |
SMALLINT | -32768〜32767 | 0〜65535 |
MEDIUMINT | -8388608〜8388607 | 0〜16777215 |
INT (INTEGER) | -2147483648〜2147483647 | 0〜4294967295 |
BIGINT | -9223372036854775808〜9223372036854775807 | 0〜18446744073709551615 |
3.2 小数类型
类型名称 | 说明 | 存储需求 |
---|---|---|
FLOAT | 单精度浮点数 | 4 个字节 |
DOUBLE | 双精度浮点数 | 8 个字节 |
DECIMAL (M, D),DEC | 压缩的“严格”定点数 | M+2 个字节 |
四、二进制类型
类型名称 | 说明 | 存储需求 |
---|---|---|
BIT(M) | 位字段类型 | 大约 (M+7)/8 字节 |
BINARY(M) | 固定长度二进制字符串 | M 字节 |
VARBINARY (M) | 可变长度二进制字符串 | M+1 字节 |
TINYBLOB (M) | 非常小的BLOB | L+1 字节,在此,L<2^8 |
BLOB (M) | 小 BLOB | L+2 字节,在此,L<2^16 |
MEDIUMBLOB (M) | 中等大小的BLOB | L+3 字节,在此,L<2^24 |
LONGBLOB (M) | 非常大的BLOB | L+4 字节,在此,L<2^32 |