本文总结了MySQL数据库中常用的数据类型及其相关原理,MySQL中一般支持的数据类型有数字类型、字符串类型、二进制类型,用于存储三种常见类型的数据。
本文总结了MySQL数据库中常用的数据类型及其相关原理,MySQL中一般支持的数据类型有数字类型、字符串类型、二进制类型,用于存储三种常见类型的数据。
要想学好MySQL,了解其支持的基本数据类型以及其内部原理极其重要。只有这样,我们才能根据不同的业务需求选择不同的数据类型,达到最佳的存储效果和查询性能。因此本文重点总结了MySQL支持的数据类型以及其内部的存储原理。
一般来说,MySQL分为四类:数字类型,日期时间类型,字符串类型,二进制类型等。
数字类型
数字类型是最基本的类型,在业务开发中存储增量主键ID、金额、数量等属性时,往往会选择数字类型进行存储。一般来说,数字类型分为整型、浮点型、定点型三类。整型对应我们现实生活中常用的整数类型;浮点型对应现实生活中的小数类型;定点型则是为了存储精确的小数而设计的。
整数
在整数类型中,根据有无符号分为无符号数和有符号数。同时考虑到不同的存储空间和整数表示范围,整数类型又分为 、 、 、INT 和 五类。各类别的类型、所占空间及含义如下表所示:
类型 占用存储空间 无符号值范围 有符号值范围 含义 字节 0~$2^8 $\(-2^{7}\)~\(2^{7}-1\)
非常小的整数 字节 0~\(2^{16}-1\)\(-2^{15}\)~\(2^{15}-1\) 小整数 字节 0~\(2^{24}-1\)\(-2^{23}\)~\(2^{23}-1\) 中等大小的整数 INT(别名) 4 个字节 0~\(2^{32}-1\)\(-2^{31}\)~\(2^{31}-1\) 标准整数,与 Java 中的 int 类型相同 字节 0~\(2^{64}-1\)\(-2^{64}\)~\(2^{64}-1\) 大整数
具体使用时,在为变量设置变量类型时添加相应的类型关键字即可;在区分无符号数和有符号数时,需要添加关键字进行区分,添加关键字后表示使用的无符号数,例如表示无符号类型的数。
浮点
浮点类型主要用于存储小数,其实现和存储范围与我们在其他编程语言中学习到的类型类似,分为单精度浮点类型(FLOAT)和双精度浮点类型(FLOAT),二者的存储空间和表示范围如下表所示:
类型 占用存储空间 绝对值 最小非零值 绝对值 最大值 含义 字节 ±1.-38 ±4.+38 单精度浮点 字节 ±2.225E-308 ±1.+3008 双精度浮点
对于浮点数具体的内部存储原理以及存储范围的确定,有兴趣的同学可以参考之前的一篇文章《从内存角度解析浮点数大小比较方法》这里就不再赘述了。
从表中我们可以看出,浮点型数据可以将大量的小数转换成二进制进行存储,但是在实际存储过程中,很多小数是有误差的,也就是有精度损失。为了解决这个问题,MYSQL中引入了“定点数类型”,实现小数的精确存储。
定点数类型
作为精确存储小数的一种方式,定点类型的设计理念和存储原理与浮点数有较大区别,其具体结构如下表所示:
该类型占用的存储空间范围从(M,D)到M和D的值。
从表中我们可以看出定点数类型由两部分组成:
存储的时候,为了保证定点数不丢失小数精度,采用如下存储策略:
将小数部分用小数点分隔,将小数点左右两个十进制整数分开存储。
例如存储8.32时,将8和32分开存储,相当于保存了精确的小数8.32。
在具体使用中,不同的 M 和 D 值会影响存储的小数范围。MySQL 本着“尽可能使用少的存储空间”的原则,在设计时,对(M,D)数据类型采用如下策略分配存储空间和存储数据。我们以(16,4)为例:
从图中可以看到,在分组时,如果不够9个十进制位,那么最终也会被单独划分成一组,比如第一组和第三组。
该组包含的十进制位数 占用存储空间 备注 存储十进制数最多为 99,需 1 或 21 个字节,一个字节的存储范围为(-128,127)即可满足要求 存储十进制数最多为 9999,需 3 或 42 个字节,两个字节的存储范围为(-32,768,32,767)即可满足要求 存储十进制数最多为 999,999,需 5 或 63 个字节,三个字节的存储范围为(-8,388,608,8,388,607)即可满足要求 存储十进制数最多为 999,999,999,需 7 或 8 或 94 个字节,四个字节的存储范围为(-2,147,483,648, 2,147,483,647)满足要求
从表中可以看出,在选择存储位数的时候,其实能够表示的存储范围是大于需要表示的数字范围的,所以这种存储方案是可行的。当然有朋友会问,这样存储好像很浪费空间?没别的办法,只能牺牲空间来缓存存储精度了。在工程实践中,这种
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。