int(11)vs int(其他)

时间:2011-09-26 08:05:43

标签: mysql

我是网络编程的新手,并且可以在网上找到不同的教程。

我做了我的研究,发现在int(11)中,11是整数的最大显示宽度,如果除非整数是UNSIGNED(在这种情况下是10),它是默认值。

当我看到这样的事情时:

id INT(11) not null AUTO_INCREMENT

我没有问题。但为什么我在不同的教程中看到不同的东西?对于考试,有些人说,

id INT(10) not null AUTO_INCREMENT

甚至

id INT(4) not null AUTO_INCREMENT

那些尝试实现这些目标的作者是什么?似乎没有人愿意解释10或4的含义。

好吧,他们显然减少了显示宽度,但为什么呢?默认宽度为11有什么问题?他们为什么要改变它?还是有其他我不知道的原因?

感谢。

7 个答案:

答案 0 :(得分:44)

x中的INT(x)与空间要求或任何其他性能问题无关,它实际上只是显示宽度。通常将显示宽度设置为合理的值对于UNSIGNED ZEROFILL选项非常有用。

//INT(4) UNSIGNED ZEROFILL
0001
0002 
...
0099
...
0999
...
9999
...
10000

//INT(2) UNSIGNED ZEROFILL
01
02 
...
09
...
99
...
100

如果没有UNSIGNED ZEROFILL选项,该值将用空格填充到适当的显示宽度。

//INT(4)
   1
   2 
...
  99
...
 999
...
9999
...
10000

//INT(2)
 1
 2 
...
 9
...
99
...
100

答案 1 :(得分:10)

这个数字只是一个名为“显示宽度”的代表性选项。某些应用程序可能会在显示数值数据类型时使用它来填充字段。

  

int size既不是位也不是字节。它只是显示宽度,当字段指定了ZEROFILL时使用。

这个blog解释了MySQL中int(size)的含义。

答案 2 :(得分:4)

来自the docs

“应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。(也就是说,此宽度为在结果集返回的元数据中出现。是否使用它取决于应用程序。)“就是说,int(4)礼貌地要求123显示为”123“。不知道实际上有多少事情需要注意,或者为什么他们在教程中烦恼。

“显示宽度不会限制可以存储在列中的值的范围。也不会阻止比列显示宽度更宽的值正确显示。”因此,如果您将123456推送到int(4),它仍然是123456

与磁盘空间或性能无关,只是提示应用程序检索要以至少N位数显示的数据。

可以结合使用相关的ZEROFILL选项来实际填充返回的数据。因此,int(4) ZEROFILL中的123返回为0123。

答案 3 :(得分:1)

是的,它指定了显示宽度,只有在指定ZEROFILL时才会起作用。所以那时它可以用所需的零数填充字段值。

答案 4 :(得分:0)

性能增加 最大允许大小的差异。

在该列上应用ZEROFILL时,。 (见:http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/

答案 5 :(得分:0)

我同意MySQL手册对整数的长度/显示宽度有点模糊。您可能认为这会将您可以存储在列中的值限制为位数,但是colomn的有效范围不会更改,您将其设置为1或11。

它真正做的是确定列值的显示宽度。唯一有用的情况是,如果你使用ZEROFILL来填充零值。

所以基本上,你可以在列中存储的内容中,INT(1)和INT(11)之间没有真正的区别,唯一的情况就是当你想要ZEROFILL你的值时。

更多信息:
http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

答案 6 :(得分:0)

从此blog article

复制

MySQL对称为zerofill的数字类型有一些了解。此功能会影响数字类型的显示大小。与字符串类型不同,括号内的数字不是类型字符的存储大小。对于数字类型,类型名称本身决定了存储大小。

整数类型,它是zerofill的填充大小。