对于int类型来说,当定义为无符号int时,最大取值范围是4294967295,数一下长度也就10位,那么难道我们定义int(11)的时候,可以突破int类型的取值上限了吗?

另外有些细心的朋友可能会发现,我们在创建表时,如果没有指定int类型的length,MySQL会自动帮我们指定length为int(10)。如果我们指定了int(x),那么length就会被定义为x。

其实,对于int类型来说,其最大值和最小值都是固定的,定义的int(x)中x代表的并不是长度,而是显示宽度。

当定义一个无符号int类型,且设置了ZEROFILL属性时,如果数值的长度没有达到显示的宽度时,MySQL会自动的在数值前面补零直至达到定义的宽度。

例如

create table a(
 #unsigned 指定无符号, 范围是0到2^32-1,也就是4,294,967,295
 #有符号的范围是 -2,147,483,648 到 2,147,483,648
 id int(8) unsigned zerofill not null
)

#新增值为1.  数据长度小于8,显示时则从左向右补0,
#select * from a
----id------
00000001

存储的是1,00000001只是用来给我们显示用的。

zerofill填充只对正数起作用,因为ZEROFILL属性会隐式地将数值转为无符号型。

文章作者: 刘同学
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 刘同学的小站
数据库 oracle Mysql
喜欢就支持一下吧