Mysql:int类型和varchar类型后面跟着的长度数字是表示什么意思呢?

在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如:int(5)、varchar(10) 等等,但是他们代表的意思是什么呢?是该列允许存储值的最大宽度吗?

 

场景1:为什么我设置成 int(1), 也一样能存 101001000 呢?

场景2:为什么我设置varchar(10),却只能存储最多10个字符呢?

那是因为在mysql中,int后面的数字代表的是显示宽度,而varchar后面的数字代表的是字符长度。

也就是说int后面的数字和存储值的大小无关,具体int能存储的范围是多少,是根据int类型占用字节大小有关。

varchar后面的数字却是和要存储的数据长度有关系的,varchar(5),则只能最多存储5个字符;

 

例:以下是每个整数类型的存储和范围 (来自 mysql 手册)

我们可以看出int类型存储大小是4个字节。根据1字节 = 8位/比特,也就是2^32 。 所以int无符号的取值范围(-2147483648 ~ 2147483647),最大能表示长度为10的数。所以在数据库中你设置int(1),却能存储101001000,那是因为你还在该类型的范围内。这就引来疑问了,那设置长度的意义是什么呢?

答:当你设置zerofill也就是0填充的时候,这个长度的意义就出现了,例如:设置字段为int(4) zerofill(0填充), 插入值 1,则会显示 0001,也就是当你的值不满足显示宽度的时候,会在该值左侧用0补充长度。总而言之如果不设置0填充,其实设置int后面的数字没有太大意义。(但是手册上还有这么一句话 "当 mysql 为某些复杂的联结 (join) 生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度")。

 

 

 

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页