MySQL 数据类型
MySQL 数据类型
MySQL 的数据类型有大概可以分为 5 种,分别是:
- 整数类型(含:整数类型和浮点数类型)
- 整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
- 浮点数类型和定点数类型
- 浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL
- 日期和时间类型
- YEAR、TIME、DATE、DATETIME 和 TIMESTAMP
- 字符串类型
- CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等
- 二进制类型
- BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB
整数类型
MySQL 主要提供的整数类型有 TINYINT、 SMALLINT、 MEDIUMINT、 INT、 BIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。
类型名称 | 说明 | 存储需求 |
---|---|---|
TINYINT | 很小的整数 | 1个字节 |
SMALLINT | 小的整数 | 2个宇节 |
MEDIUMINT | 中等大小的整数 | 3个字节 |
INT (INTEGHR) | 普通大小的整数 | 4个字节 |
BIGINT | 大整数 | 8个字节 |
不同的整数类型有不同的取值范围,并且需要不同的存储空间,因此应根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。
类型名称 | 说明 | 存储需求 |
---|---|---|
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 |
小数类型
MySQL 中使用浮点数和定点数来表示小数。浮点类型有两种,分别是单精度浮点数( FLOAT)和双精度浮点数( DOUBLE);定点类型只有一种 DECIMAL。
浮点类型和定点类型都可以用 (M, D)
来表示,其中 M
称为精度,表示总共的位数; D
称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。
类型名称 | 说明 | 存储需求 |
---|---|---|
FLOAT | 单精度浮点数 | 4 个字节 |
DOUBLE | 双精度浮点数 | 8 个字节 |
DECIMAL (M, D),DEC | 压缩的“严格”定点数 | M+2 个字节 |
- DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。
- 不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
- 定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,
- 两个浮点数进行减法和比较运算时容易出现精度计算问题,尽量避免做浮点数比较。
日期和时间类型
MySQL 中表示日期的数据类型:YEAR、 TIME、 DATE、 DTAETIME、 TIMESTAMP
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901 ~ 2155 | 1 个字节 |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 个字节 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 个字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 个字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 个字节 |
字符串类型
MySQL 中的字符串类型有 CHAR、 VARCHAR、 TINYTEXT、 TEXT、 MEDIUMTEXT、 LONGTEXT、 ENUM、 SET 等。
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAR(M) | 固定长度非二进制字符串 | M 字节,1<=M<=255 |
VARCHAR(M) | 变长非二进制字符串 | L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT | 非常小的非二进制字符串 | L+1字节,在此,L<2^8 |
TEXT | 小的非二进制字符串 | L+2字节,在此,L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此,L<2^24 |
LONGTEXT | 大的非二进制字符串 | L+4字节,在此,L<2^32 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
M
表示可以为其指定长度。
CHAR 和 VARCHAR 类型
- CHAR(M) 为固定长度字符串,定义时指定字符串列长。M 范围 0~255 个字符。存储时,尾部自动填充空格;被检索时,尾部的空格将被删除。
- VARCHAR(M) 是长度可变的字符串,M 表示最大列的长度,M 范围 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,实际占用的空间为字符串的实际长度加 1。
TEXT 类型
TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。
- TINYTEXT 表示长度为 255(2^8-1)字符的 TEXT 列。
- TEXT 表示长度为 65535(2^16-1)字符的 TEXT 列。
- MEDIUMTEXT 表示长度为 16777215(2^24-1)字符的 TEXT 列。
- LONGTEXT 表示长度为 4294967295 或 4GB(2^32-1)字符的 TEXT 列。
ENUM 类型
ENUM 是一个字符串对象,值为表创建时列规定中枚举的一列值。
值 | 索引 |
---|---|
NULL | NULL |
zero | 0 |
first | 1 |
second | 2 |
third | 3 |
SET 类型
SET 是一个字符串的对象,可以有零或多个值,最多可以有 64 个成员,各成员之间用逗号 ,
隔开。列值有重复,自动删除。
二进制类型
MySQL 中的二进制字符串有 BIT、 BINARY、 VARBINARY、 TINYBLOB、 BLOB、 MEDIUMBLOB 和 LONGBLOB。
类型名称 | 说明 | 存储需求 |
---|---|---|
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 |
M
表示指定长度。
BIT 类型
位字段类型。范围为 1~64。
BINARY 和 VARBINARY 类型
BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。
BLOB 类型
BLOB 是一个二进制的对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
数据类型 | 存储范围 |
---|---|
TINYBLOB | 最大长度为255 (28-1)字节 |
BLOB | 最大长度为65535 (216-1)字节 |
MEDIUMBLOB | 最大长度为16777215 (224-1)字节 |
LONGBLOB | 最大长度为4294967295或4GB (231-1)字节 |