MySQL支持多种数据类型,大致可以分为三类:数值、字符串(字符)、日期/时间。
数值类型
- 严格数值数据类型(INTEGER、SMALLINT、TINYINT、MEDIUMINT 和 BIGINT),默认都是有符号的。
- 近似数值数据类型(FLOAT、REAL和DOUBLE)
- 定点数类型(DECIMAL)
关键字INT是INTEGER的同义词,关键字DEC是 DECIMAL的同义词.
严格数值数据类型
类型名称 | 说明 | 存储需求字节 | 有符号数取值范围 | 无符号数取值范围 |
---|---|---|---|---|
TINYINT | 十分小的整数 | 1 | 128~127 | 0~255 |
SMALLINT | 小的整数 | 2 | 32768~32767 | 0~65535 |
MEDIUMINT | 中等大小的整数 | 3 | -8388608~8388607 | 0~16777215 |
INT (INTEGER) | 标准的整数(常用) | 4 | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 大整数 | 8 | 9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
INT(M)中的M指示最大显示宽度,最大有效显示宽度是4,需要注意的是,显示宽度与存储大小或类型包含的值的范围无关。
近似数值数据类型
类型名称 | 存储需求/字节 | 有符号的取值范围 | 无符号的取值范围 |
---|---|---|---|
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 |
FLOAT 为单精度浮点数类型,DOUBLE为双精度浮点数类型。
浮点数类型可以用(M,D)来表示,其中M称为精度,表示总共的位数,D称为标度,表示小数的位数。
定点数类型
定点数类型也可以用(M,D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。
DECIMAL 的默认D值为0,M值为10。
DECIMAL类型不同于FLOAT和DECIMAL, DECIMAL实际是以字符串存储的。
金融计算的时候,一般使用DECIMAL。
字符串类型
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 | 非常小的非二进制字符串 | 2^8-1 L+1字节,在此L<28 |
TEXT | 小的非二进制字符串 (常用,保存大文本) |
2^16-1 L+2字节,在此L<216 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此L<224 |
LONGTEXT | 大的非二进制字符串 | L+4字节,在此L<232 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2字节,取决于枚举值的数目(最大值65535) |
SET | 一个集合,字符串对象可以有零个或多个SET成员 | 1,2,3,4,或8字节,取决于集合成员的数量(最多64个成员) |
日期和时间类型
DATETIME、DATA、TIMESTAMP、TIME、YEAR
类型名称 | 说明 | 日期格式 | 日期范围 | 存储需求/字节 |
---|---|---|---|---|
YEAR | 年 | YYYY | 1901~2155 | 1 |
TIME | 时间 | HH:MM:SS | -838:59:59-838:59:59 | 3 |
DATE | 日期 | YYYY-MM-DD | 1000-01-019999-12-31 | 3 |
DATETIME | 最常用的时间格式 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:009999-12-3123:59:59 | 8 |
TIMESTAMP | 时间戳 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:001~2038-01-19 03:14:07 | 4 |
null
没有值,未知
注意:不要使用null进行计算,结果为null
字段属性
unsigned
- 无符号的整数
- 声明了该列不能存储负数
zerofill
- 0填充的
- 不足的位数,使用0来填充。长度3,写入1,自动填充为001
主键
自增
通常用来设计唯一的主键,必须是整数类型
非空
not null
非空,但可以录入空字符串
default
- 默认值
每个表都应该存在5个字段:
id 主键
version 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间