欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库关于字段类型、字段长度方面的建议

程序员文章站 2022-11-17 08:49:21
首先我们思考三个问题: 1、tinyint(1) 、int (4)、int(11) 有什么区别? 2、varchar(4)、char (4) 有什么区别? 3、double、flout、bigDecimal有什么区别? 来自章大大的理解: 1、对于这个问题,我们可以解剖成两个小问题,第一个,int ......

首先我们思考三个问题:

1、tinyint(1) 、int (4)、int(11) 有什么区别?

2、varchar(4)、char (4) 有什么区别?

3、double、flout、bigdecimal有什么区别?

 

来自章大大的理解:

1、对于这个问题,我们可以解剖成两个小问题,第一个,int 类型和 tinyint 类型有什么区别?第二个,int 类型后面跟的数字有什么作用?

我们先解决第一点,tinyint 和 int 能存储的数据范围不同,存储占用空间不同,tinyint占用一个字节,int 占用了4个字节,一个字节8个bit, 也就是说,tinyint 能存储-2^8-1~2^8-1 的范围的数字,int 能存储-2^32-1~2^32-1的数字。

ps-> 所以,如果存储值比较小的数据,比如 0,1,2这种,建议使用tinyint,这样更节约数据库空间,性能更高。

第二点,int 4 和 int 11 本身没什么区别,存储占用4个字节,能存储的数据范围一样。注意啦,int (m),这个m不是代表限制数据存储的长度,而是整型数值的显示宽度,和varchar (n)不同的哈,这个显示宽度有且只在设置了 zerofill(零填充) 这个属性后才能发挥作用。 也就是说,如果存储5这个数字,设置了零填充,int 4 的存储结构为 0005,int 11 的存储结构为00000000005;如果存储555555,int 4存储 555555, int 11存储00000055555,当位数不够左边补0,当显示位数够了,不补0。

ps: navicat 会自动做数据处理,当你 设置了 int 4 + 零填充,存储5,显示可能还是5,看不到笔者说的效果,但是当你导出数据到excel后,你就能看见0005啦。 

注意:如果设置了零填充,存储的数据会强制变更为无符号存储,4个字节只能存0~21亿的数字啦。我猜设计int 4 是因为这个int 占用4个字节,int 11 是因为int 最大值是十位,加上符号位,刚刚好11。