MySQL--数据类型

数据类型(data_type)是指系统中所允许的数据的类型。MySQL的数据类型通常是针对每个字段所能存储的数据的数据类型,即这一列存储的数据的数据格式,应该符合该列对应字段的数据类型的规则。

数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。

我们在创建数据表时,就需要为每个字段设定数据类型,每个字段的数据类型应该是根据系统的具体使用场景来进行确定的,某个字段的数据类型不符合系统的要求可能会导致系统崩溃。数据类型的使用,在一定程度上能够影响程序的功能和性能,所以在设计表时,数据类型的选定也是一个重要的环节。

一、MySQL的数据类型

MySQL的数据类型可以大概的分为四大类:数值类型、字符串类型、时间日期类型、二进制类型等。

1、数值类型

数值类型又可以分为三个小类:整型、浮点型、定点数。

(1)整型:TINYINTSMALLINTMEDIUMINTINTBIGINT

数据类型名称 长度 含义
TINYINT 1个字节  范围:有符号(-128~127),无符号(0~255) 很小的整数
SMALLINT 2个字节  范围:有符号(-32768~32767),无符号(0~65535) 小的整数
MEDIUMINT 3个字节  范围:有符号(-8388608~8388607),无符号(0~16777215) 中等大小的整数
INT 4个字节  范围:有符号(-2147483648~2147483647),无符号(0~4294967295) 普通大小的整数
BIGINT 8个字节  范围:有符号(-9223372036854775808〜9223372036854775807),无符号(0~18446744073709551615) 大整数

 

(2)浮点型:FLOATDOUBLE、REAL

数据类型名称 长度  含义
FLOAT(M,D) 4个字节  范围:-3.4E38~3.4E38(7个有效位) 单精度实型
DOUBLE(M,D) 8个字节  范围:-1.7E308~1.7E308(15个有效位) 双精度实型
REAL(M,D) 8个字节  范围:-1.7E308~1.7E308(15个有效位) 不精确的双精度浮点型,在创建表时,默认转换成double类型

 

(有效位=整数部分位数+小数部分位数)

float、double、real字段存储位数示例:

注意:real字段设定时是real类型,但是真正保存后MySQL自动转换成double类型了!!

 

 

 

 由上图可以发现,float类型存储的数据是原数据的近视值,不能准确的存储原数据,尽管上图中的double类型在有效位范围内存储的数据看似准确,但其实在末尾的小数中存储的也是近视值,在某些对小数要求严格的项目中,通常使用定点数来作为小数的数据格式。

 

(3)定点数:DECIMAL、NUMERIC

在数据库中存放的是精确值

数据类型名称  长度   含义
 DECIMAL(M,D)  共有65个有效位,小数部分最多30个有效位,0<=D<=30,D<=M<=65-D  定点数
 NUMERIC(M,D)  同上  同上

 

设定numeric数据类型时,MySQL默认转换成decimal类型。

 

2、字符串类型

 CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUMSET 

数据类型名称 长度 含义
CHAR(M) M 字节,0<=M<=255,范围:0-255字符 固定长度非二进制字符串
VARCHAR(M) L+1字节,L<= M,0<=M<=2^16,范围:64k 变长非二进制字符串
TINYTEXT L+1字节,L<2^8,范围:0-255字节 非常小的非二进制字符串
TEXT L+2字节,L<2^16,范围:64k 小的非二进制字符串
MEDIUMTEXT L+3字节,L<2^24,范围:16M 中等大小的非二进制字符串
LONGTEXT L+4字节,L<2^32,范围:4G 大的非二进制字符串
ENUM 1或2个字节,取决于枚举值的数目 (最大值为65535) 枚举类型,只能有一个枚举字符串值
SET 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) 一个字符串对象,可以有零个或多个SET成员

字符类型解析:MySQL--char,varchar,text类型

 

ENUM类型

枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1-255个成员的枚举需要1个字节存储,对于255-65535个成员,需要2个字节来存储。最多允许有65535个成员。ENUM类型忽略大小写,当插入值不在枚举的范围内时,不会报错,会将第一个值插入。

SET类型

也是一个字符串对象,里面可以包好64个成员,根据成员的不同,存储也不同

1-8个成员,占1个字节,9-16个个成员的集合,占2个字节,17-24成员的集合,占3个字节,25-32成员的集合,占4个字节,33-64成员的集合,占8个字节

SET类型可以一个插入多个成员,ENUM类型一次只能插入一个成员。

SET类型可以从允许集合中选择1-多个元素进行组合。所以对于输入的值只要是允许范围内的,都可以正确注入到SET类型中,对于重复的成员,则只取一次。

 

 3、时间日期类型

YEARTIMEDATEDTAETIMETIMESTAMP

数据类型名称 长度 含义
YEAR 1 个字节,范围:1901 ~ 2155 yyyy
TIME 3个字节,范围:-838:59:59 ~ 838:59:59 HH:mm:ss
DATE 3个字节,范围:1000-01-01 ~ 9999-12-3 yyyy-MM-dd
DATETIME 8个字节,范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 yyyy-MM-dd HH:mm:ss
TIMESTAMP 4个字节,范围:1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC yyyy-MM-dd HH:mm:ss

  time、date、datatime、timestamp类型解析:MySQL--时间类型

 

 4、二进制类型

 BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOB 、 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

 

二进制类型解析:MySQL--二进制类型

 

posted @ 2021-07-19 16:50  砰砰的猿  阅读(166)  评论(0编辑  收藏  举报