Mysql的int类型探究
前言
最近被问到了这个问题,原题目应该是mysql的int(1)和int(10)有什么区别。当时没答好,也确实没注意过,故在此研究记录下。
探究
mysql中int所能设置的长度范围是1~255。当你输入小于1的数字的时候,会自动给你置为11。当你输入的数值是大于255的时候,会提示你最大为255。
但是实际上你设置多少是没有区别的,效果和int(11)是一摸一样的。你设置一个int(1),你以为只能存储0~9,其实不然,他可以存储最多11位数字。存储的范围是-2147483648 ~ 2147483647。
那么int后面指定的数组到底是什么作用呢,只有在加入zerofill的时候,才能看出效果。如果你的int设置为int(4),当你存储1的时候,那么展示的就是0001。
由此看出结论,int后面代表的是宽度。实际占用空间永远为4字节。
需要注意的是,不要用navicat进行探究,navicat看不出效果,用控制台才可以。
结论
mysql的int的数字只是为了展示长度用的,float的数字才会限制实际的数据范围,比如 float(3,2) 只能够写入 0.00~999.99.
扩展
MySQL的 int 和 tinyint 的默认长度是 int(11) 和 tinyint(4), 而boolean 型实际存储的是 tinyint(1).
存储范围
上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的字节大小都是固定的。例如,之前设置的int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换句话说就是,你可以存入有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何一个数。int(1)和int(11)占用的是4个字节,可以存入上述这些数,tinyint(1)和tinyint(4)占用的是1个字节,可以存入从-128到127的数,这也是为什么之前的一次试验,int(1)插入128成功,而tinyint(1)插入128却提示超出长度。
除了bigdeciaml,其他的长度最大都是255。bigdecimal如下
我有话说: