详解MySQL数据类型

很久没写文章,也有博友在我的有些文章中留言,希望我可以写一些文章,公司项目一直很忙,但是每天也尽量腾出一些时间写一些东西,主要针对工作中一些常用的知识点系统性的梳理(可能我们在工作中只是纯粹的使用而已,不会去进行总结、归纳)。

本文写的内容是MySQL数据类型,之前写MySQL系列文章的时候一直忽略的一个知识点,现在想来,我们学习一门语言,无非从两个方面入手:

基本语法,有了语法,我们才可以组织逻辑

数据类型,即在特定场景下选择合适的数据类型,到底是用整型还是浮点型还是字符串,每种数据机构占多少字节,最大值是多少。这点只针对强类型的语言,像js这种弱类型的语言,是不需要考虑这一点的

希望通过一篇文章的梳理,可以把MySQL数据结构这块都归纳清楚。

 

整型

先从最基本的数据类型整型说起,首先用一张表格归纳一下:

数据类型   字节数   带符号最小值   带符号最大值   不带符号最小值   不带符号最大值  
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   18446744073709551616  

即使是带符号的BIGINT,其实也已经是一个天文数字了,什么概念,9223372036854775807我们随便举下例子:

以byte为例可以表示8589934592GB-->8388608TB-->8192PB

以毫秒为例可以表示292471208年

所以从实际开发的角度,我们一定要为合适的列选取合适的数据类型,即到底用不用得到这种数据类型?举个例子:

一个枚举字段明明只有0和1两个枚举值,选用TINYINT就足够了,但在开发场景下却使用了BIGINT,这就造成了资源浪费

简单计算一下,假使该数据表中有100W数据,那么总共浪费了700W字节也就是6.7M左右,如果更多的表这么做了,那么浪费的更多

要知道,MySQL本质上是一个存储,以Java为例,可以使用byte类型的地方使用了long类型问题不大,因为绝大多数的对象在程序中都是短命对象,方法执行完毕这块内存区域就被释放了,7个字节实际上不存在浪不浪费一说。但是MySQL作为一个存储,8字节的BIGINT放那儿就放那儿了,占据的空间是实实在在的。

最后举个例子:

1 drop table if exists test_tinyint; 2 create table test_tinyint ( 3 num tinyint 4 ) engine=innodb charset=utf8; 5 6 insert into test_tinyint values(-100); 7 insert into test_tinyint values(255);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywjdx.html