MySQL数据类型主要包含8类,下面重点详解MySQL数据类型的8大常见数据类型。
数值类型
数值类型,包含:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT。
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
tinyint |
1 字节 |
(-128,127) |
(0,255) |
小整数值 |
smallint |
2 字节 |
(-32 768,32 767) |
(0,65 535) |
大整数值 |
mediumint |
3 字节 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整数值 |
int或integer |
4 字节 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
大整数值 |
bigint |
8 字节 |
(-9,223,372,036,854,775,808,9 223 372 036 854 775 807) |
(0,18 446 744 073 709 551 615) |
极大整数值 |
float |
4 字节 |
(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |
0,(1.175 494 351 E-38,3.402 823 466 E+38) |
单精度 浮点数值 |
double |
8 字节 |
(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
双精度 浮点数值 |
decimal |
DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 |
依赖于M和D的值 |
依赖于M和D的值 |
小数值 |
浮点型
对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
float和double在不指定精度时,默认会按照实际的精度,由实际的硬件和操作系统决定。
定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
定点数只有一种 decimal,定点数在 MySQL 内部中以字符串的形式存在,比浮点数更为准确,适合用来表示精度特别高的数据。
DECIMAL(M,D)与浮点型一样处理规则,M的取值范围为0~65,D的取值范围为0~30,而且必须<=M,超出范围会报错。
DECIMAL如果指定精度时,默认的整数位是10,默认的小数位为0。
日期时间类型
MySQL 中的日期与时间类型,主要包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP,每个版本可能不同。
类型 |
大小(字节) |
范围 |
格式 |
用途 |
date |
3 |
1000-01-01/9999-12-31 |
YYYY-MM-DD |
日期值 |
time |
3 |
‘-838:59:59’/’838:59:59’ |
HH:MM:SS |
时间值或持续时间 |
year |
1 |
1901/2155 |
YYYY |
年份值 |
datetime |
8 |
1000-01-01 00:00:00/9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
timestamp |
4 |
1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS |
混合日期和时间值,时间戳 |
字符串
字符串包括: CHAR、VARCHAR、BINARY、VARBINARY、TEXT 等。
CHAR 是定长的,根据定义的字符串长度分配足够的空间,VARCHAR 用于存储可变长字符串,TEXT 存大文本。
MySQL数据类型 | 含义 |
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
二进制数据
二进制数据包括:xxxBLOB和xxxBINARY。
BLOB是一个二进制大对象,可以容纳可变数量的数据,有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但是不同的是,它们存储的不是字符字符串,而是二进制串。
枚举
ENUM 我们在 Java 中经常会用到,它表示的是枚举类型。
它的范围需要在创建表时显示指定,对 1 – 255 的枚举需要 1 个字节存储,对于 255 – 65535 的枚举需要 2 个字节存储。
比如:enum(‘男’,‘女’)定义了一个枚举类型数据,其允许的取值为字符串‘男’或‘女’。
一个枚举类型数据最多可以有65535个枚举项。
集合
SET和ENUM类型非常类似,也是一个字符串对象,里面包含0~64个成员。
SET和ENUM最主要的区别在于SET类型一次可以选择多个成员,而ENUM则只能选择一个。
比如:set(‘读书’,‘听音乐’,‘打球’,‘游泳’)定义了一个集合类型数据,其允许的取值为‘读书’,‘听音乐’,‘打球’,‘游泳’中某一个或某几个的组合。
一个集合类型数据最多包含64个元素值,占用空间8个字节。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》