MySQL提供了多种数据类型,主要包括数值类型、字符串类型、日期和时间类型等。不同版本的MySQL支持的数据类型及其命名方式可能会稍有不同。我们可以通过查询帮助文件来获得具体信息,以5.7.19为例:
我们还可以进一步查询某一种具体类型的定义及其存储空间等基本信息。
数值类型
类型名 | 字节 | 有符号数范围 | 无符号数范围 | |
---|---|---|---|---|
整数类型 | TINYINT | 1 | -128~127 | 0~256 |
SMALLINT | 2 | -32768 | 32767 | |
MEDIUMINT | 3 | -8388608~8388607 | 0~ 16777215 | |
INT、INTEGER | 4 | -2147483648~2147483647 | 0~4294967295 | |
BIGINT | 8 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 | |
范围 | ||||
浮点数类型 | FLOAT | 4 | -3.402823466E+38~-1.175494351E-38, 0, 1.175494351E-38~3.402823466E+38 | |
DOUBLE | 8 | -1.7976931348623157E+308~-2.2250738585072014E-308 , 0, 2.2250738585072014E-308~1.7976931348623157E+308 | ||
定点数类型 | DEC(M,D)、DECIMAL(M,D) | M+2 | M为精度,D为标度。M最大值为65,D最大值为30。M默认为10,D默认为0。 | |
位类型 | BIT(M) | 1~8 | M的范围为0~64 |
日期和时间类型
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 1970-01-01 00:00:01.000000 | 2038-01-19 03:14:07.999999 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1000 | 9999 |
字符串类型
类型 | 字节 | 描述及存储需求 |
---|---|---|
CHAR(M) | M | 定长字符串,M为0~255之间的整数,默认为1,检索时删除尾部空格 |
VARCHAR(M) | 实际长度加1或2 | 可变长度字符串,M的范围为0~65535,检索时保留尾部空格 |
TINYBLOB | 实际长度加1 | 允许长度0~255字节 |
BLOB | 实际长度加2 | 允许长度0~65535字节 |
MEDIUMBLOB | 实际长度加3 | 允许长度0~16777215字节 |
LONGBLOB | 实际长度加4 | 允许长度0~4294967295字节 |
TINYTEXT | 实际长度加1 | 允许长度0~255字节 |
TEXT | 实际长度加2 | 允许长度0~65535字节 |
MEDIUMTEXT | 实际长度加3 | 允许长度0~16777215字节 |
LONGTEXT | 实际长度加4 | 允许长度0~4294967295字节 |
VARBINARY(M) | 实际长度加1 | 可变长度二进制字符串 |
BINARY(M) | M | 定长二进制字符串 |
上述字符串类型中,实际长度后面多出空间是用来存放字符串大小的。
BLOB系列和TEXT系列的区别主要在于BLOB存储二进制字符串,而TEXT则存储非二进制字符串。
集合类型和枚举类型
MySQL的ENUM类型的值范围需要在创建表时显式指定,MySQL最多允许一个枚举类型有65535个成员。而集合类型与枚举类型类似,但一个集合类型最多只允许有64个成员。