int(11)与int(其他)

我是新来的networking编程和做不同的教程,我可以在网上find。

我做了我的研究,发现在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的意思。

好吧,他们显然减less了显示宽度,但为什么? 什么是错误的默认宽度11? 他们为什么要改变它? 或者还有什么其他的原因我不知道?

谢谢。

INT(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 

这个数字只是一个名为“显示宽度”的表示选项。 在显示数字数据types时,它可能被某些应用程序用来填充字段。

int大小既不是位也不是字节。 这只是显示宽度,当字段具有ZEROFILL指定时使用。

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

从文档 :

“这个可选的显示宽度可以被应用程序用来显示宽度小于为该列指定的宽度的整数值,用左空格填充它们 (也就是说,这个宽度出现在结果集返回的元数据中)。它是否被使用取决于应用程序。)“也就是说, int(4)有礼貌地要求123被显示为”123“。 不知道有多less事情真的注意到了,或者为什么他们会在教程中感到困扰。

“显示宽度不会限制可以存储在列中的值的范围,也不会阻止宽度超过列显示宽度的值显示正确。 所以如果你把123456放到int(4)它仍然是123456

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

相关的ZEROFILL选项可以结合使用以实际填充返回的数据。 所以123在一个int(4) ZEROFILL返回为0123。

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

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

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

所以基本上INT(1)和INT(11)之间没有什么实质性的区别,只有当你想要填充你的值的时候,

更多信息:
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

从这篇博客文章复制:

MySQL有一个被称为zerofill的数字types的小知识。 此function会影响数字types的显示大小。 与stringtypes不同,括号内的数字不是字符的存储大小。 对于数字types,types名称本身确定存储大小。

整数types是zerofill的填充大小。

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

只有在ZEROFILL应用于该列时才会使用。 (请参阅: http : //alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/ )