代表宽度的M

  • 该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
  • 显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
  • 当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。
  • 例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。

纠正误区

这里的M代表的并不是存储在数据库中的具体的长度,而是表示出来的宽度。

  • 以前总是会误以为 int(3) 只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
  • 其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度

计算机中一个字节包含8bit,那么int类型就有32bit,能表示的范围是 -2147483648~2147483647

  • 在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个宽度
  • 当你不足3位时,会帮你补全到3位的宽度,当你超过3位时,就没有任何的影响。
  • int(10)与int(11),他们之间除了在存储的时候数值宽度稍微有点区别外,在我们使用的时候是没有任何区别的
  • int(10)也可以代表2147483647这个值int(11)也可以代表。

最后,附

各自表示的整数范围:

类型 字节 最小值 最大值
(带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 4 -9223372036854775808 9223372036854775807
0 18446744073709551615