int(11)vs int(其他)

sti*_*nat 48 mysql

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

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

当我看到这样的事情时:

id INT(11) not null AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

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

id INT(10) not null AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

乃至

id INT(4) not null AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Ste*_*rig 48

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

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

//INT(2) UNSIGNED ZEROFILL
01
02 
...
09
...
99
...
100
Run Code Online (Sandbox Code Playgroud)

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

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

//INT(2)
 1
 2 
...
 9
...
99
...
100
Run Code Online (Sandbox Code Playgroud)


Ash*_*n A 11

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

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

这篇博客解释了MySQL中int(size)的含义.


Sch*_*ern 5

来自文档

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

“显示宽度不会限制列中可以存储的值的范围。也不会阻止比列显示宽度宽的值正确显示。” 所以如果你把 123456 塞进一个int(4)它仍然是123456.

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

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