M indicates the maximum display width for integer types. For floating-point and fixed-point types, M is the total number of digits that can be stored (the precision). For string types, M is the maximum length. The maximum permissible value of M depends on the data type.
这段解释来自http://dev.mysql.com/doc/refman/5.6/en/data-types.html
对于整数类型 括号里面的值不影响类型实际可以存储的范围,只是代表显示宽度,当实际内容不到这个宽度的时候在前面用0填充(只有在创建表的时候使用了ZEROFILL才有这个效果)
也就是说
int(4) int(6) int(8) 不会影响它的可存储范围 ,它还是-2147483648
-2147483647
,它还是占用4个字节,只是如果在创建表的时候指定这一列用ZEROFILL修饰了,那么取回值得时候如果不够这里指定的位数,会在前面填0
reference:
https://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/