持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
前言
在Mysql里数据是存储在数据库里的各个数据表之中,没有接触过数据库的小伙伴可以类比下我们平常使用的表格,Mysql中的数据表就跟Excel等表格差不多,表中会有许多的列,在Mysql中这些列名又可以被称为字段。在数据表中,每个字段都可以指定不同的数据类型,这篇文章带大家了解下Mysql数据类型中的数值类型。
数据类型
数据类型是用于规定数据存储的格式、约束和有效范围等根据需要存储的数据的不同,我们在创建数据表时,应该根据实际情况和实际需求来定义数据表中字段的数据类型,这样能让我们更加合理高效的存储数据。
数值类型
数值类型用来存储数字型的数据,数值类型包括了整数类型、浮点数类型和定点数类型。对于有一定编程基础的小伙伴来说,整数类型和浮点数类型应该都是比较熟悉了,整数类型用来存储整数数据,浮点数类型是用来存储小数的,那这个定点数类型又是什么鬼呢?定点数类型和浮点数类型一样,也是用来存储小数的,不过与浮点数又有所不同,定点数是数值类型中的重难点,我会着重来介绍。
整数类型
整数类型包括TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。从名字就能看得出,这些整数类型的范围是从小到大。
| 数据类型 | 所占字节 | 有符号存储范围 | 无符号存储范围 |
|---|---|---|---|
| TINYINT | 1字节 | -128~127 | 0~255 |
| SMALLIN | 2字节 | -32768~32767 | 0~65535 |
| MEDIUMINT | 3字节 | -8388608~8388607 | 0~16777215 |
| INT | 4字节 | -2147483648~2147483647 | 0~4294967295 |
| BIGINT | 8字节 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
在创建数据表时如果需要存储整数类型,可根据表中选择,具体选择那种根据你所需要存储的字段范围大小来确定。
浮点数
浮点数类型有两种,包括FLOAT和DOUBLE,它们分别代表的是单精度浮点数和双精度浮点数,浮点数有个缺陷,就是在计算的时候,可能会出现误差。所以一般用来存储对数据准确度要求没那么高的数据。
| 数据类型 | 所占字节 | 负数的存储范围 | 非负数的存储范围 |
|---|---|---|---|
| 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 |
在定义浮点数时我们可以在后面加上(M,D),M表示的是数据的精度,注意这里的精度不是表示小数位的位数,而是表示数值的位数,整数位加上小数位才是数值的位数。D表示的是数据的标度,标度又是什么呢?标度其实就是小数点后的位数。
举个例子:如我们定义一个身高的字段FLOAT(5,2)表示可插入的数据最大长度为5位,小数点后保留两位小数。185.56就是符合要求的数据。
那么如果我们插入精度更高的数据会怎么样呢?
比如我们插入170.936,最终存储到表中的数据为170.94,没错,对于超过我们定义的精度的数据,Mysql会对数据自动进行四舍五入的操作,这就是浮点数可能存在误差的原因。
定点数类型
定点数据类型也是用来存储小数的,它只有一种类型————DECIMAL。都是用来存数小数那定点数和浮点数又有什么区别呢?前面说过浮点数可能会产生误差,而定点数就是比浮点数的准确度更高,如果对数据准确度要求比较高,就不能使用浮点数,而需要使用定点数了。定点数最常用的场景就是在涉及到钱的地方了。
| 数据类型 | 所占字节 | 负数的存储范围 | 非负数的存储范围 |
|---|---|---|---|
| DECIMAL | M+2字节 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308 | 0和2.2250738585072014E-308 ~ 1.7976931348623157E+308 |
和浮点数一样,定义定点数我们也可以在后面加上(M,D)。M和D表示的含义也相同。
举个例子:我们定义一个商品的价格字段,类型为DECIMAL(6,2),1314.52就是符合精度要求的数据。
而对于超过定义精度的数据,DECIMAL又是怎么处理的呢?
我们插入一个399.888的数据,最终存储到数据库中的数据是399.89同样也是进行了四舍五入的操作。但是与浮点数不同的是,DECIMAL类型进行四舍五入的时候,会发出警告。
总结
Mysql的数值类型与我们高级语言中的数值类型有些区别,我们在定义字段类型的时候,要根据实际情况去选择合适的数值类型,这样即高效又能节省存储的空间。对于Mysql数值类型的介绍就到这里。