MySQL数据类型详解(8大常见数据类型)

MySQL数据类型详解(8大常见数据类型)-mikechen

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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法