int数据类型是固定的4个字节;
但是int(5)和int(11)区别在于,显示的数据位数一个是5位一个是11位,在开启zerofill(填充零)情况下,若int(5)存储的数字长度是小于5的则会在不足位数的前面补充0,但是如果int(5)中存储的数字长度大于5位的话,则按照实际存储的显示(数据大小在int类型的4个字节范围内即可),也就是说int(M)的M不代表数据的长度;
varchar(20)中的20表示的是varchar数据的数据长度最大是20,超过则数据库不会存储;
总结:
int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;
varchar(M) M表示的是varchar类型数据在数据库中存储的最大长度,超过则不存;