ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

int 和vachar后面的数字代表的含义

2022-08-17 10:33:29  阅读:179  来源: 互联网

标签:存储 varchar int 含义 设置 mysql 长度 vachar


在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如: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 信任地认为所有的值均适合原始的列宽度")。

 

在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如: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 信任地认为所有的值均适合原始的列宽度")。

 

 


————————————————
版权声明:本文为CSDN博主「蝶开三月」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/panjiapengfly/article/details/107579906

标签:存储,varchar,int,含义,设置,mysql,长度,vachar
来源: https://www.cnblogs.com/xuyujingjing/p/16594088.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有