当前位置: 移动技术网 > IT编程>数据库>Mysql > 数据库关于字段类型、字段长度方面的建议

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

2018年08月29日  | 移动技术网IT编程  | 我要评论

首先我们思考三个问题:

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。

 

 

 

 


 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网