在选择使用INT(3)还是INT(11)时&#xff0c

admin 阅读:41 2024-02-08 04:53:40 评论:0

  最近在网上看到一篇关于int(3)和int(11)区别的帖子,我第一反应这不就是它们之间主要涉及存储整型数据时所需的位数,即3位和11位的差异。然而,经过详细阅读文章并进行进一步的资料查询和测试后,我才发现我一直以来对于int(3)的理解存在误差。今天,我打算与家人分享这一新的认识。

  mysql-int.jpg

  首先,需要明确的是,int(3)和int(11)都是表示整数类型,而不是定义整数的存储长度。在MySQL中,INT类型占据4个字节(32位),可以存储范围是-231到231-1(约-2.1亿到2.1亿),这个范围是固定的,不受括号中数字的影响。

  int(3)和int(11) 区别在于显示宽度的影响。当我们定义一个字段为int(3)时,这个数字表示的是在使用ZEROFILL填充字符时的显示宽度,而不是实际存储的整数位数。使用ZEROFILL会在数字不足指定宽度时,在前面用零进行填充。

  我们可以在mysql(5.7)中创建数据查看下具体的效果:

  创建表:

  添加数据:

  查看数据:

  _20240127224156.jpg

  可以看到,int() 括号中的数字是在位数不足时如果使用ZEROFILL的话会在前面用零进行填充,补齐到括号中数字的位数。

使用ZEROFILL填充字段 时插入负数报错

  因为ZEROFILL属性只适用于非负整数。所以当我们插入负数时会报错。

  _20240127224711.jpg

  我们打开表的DDl,就可以看到,我们设置ZEROFILL的时候他会自动设置为unsigned(无符号)

  _20240127224545.jpg

  ZEROFILL只在整数类型上有效,对于其他数据类型(如浮点数)不适用。

  在mysql8.0 中,只有设置了ZEROFILL,才能看到int(),否则都是int

  我们在实际生产环境使用查询的时候通常要把数据库的int数据转化为java对象的Integer,所以ZEROFILL在实际生产中使用的很少,其次我们需要给数据补齐位数的时候通常是在程序中做处理,不会依赖数据库,这样我们的业务才能更灵活。

  在数据库设计中,INT(3)和INT(11)的区别主要在于它们控制输出时的显示宽度。实际的存储大小是相同的,都占用4个字节。而括号中的数字在非ZEROFILL的情况下,只是指定了输出时的最小宽度,不足时会用空格填充。在ZEROFILL的情况下,还会影响零填充的总宽度。因此,在选择使用INT(3)还是INT(11)时,主要考虑的是对数据的显示控制需求。

在选择使用INT(3)还是INT(11)时,

本文 zblog模板 原创,转载保留链接!网址:https://china642.com/post/1771.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜