新建test表,字段如下:
定义字段ID int(1),对于这个长度1,想当然的认为ID只能存0-9的数字,
但向这个字段插入9999同样没问题.所以括号里的1并不是该字段的最大长度.
int型变量,在系统中有固定的范围 (0 到 4294967295),也就是int型的字段能存的最大无符号数是4294967295,假设在id字段写入9999999999999,超过这个最大值,数据就会出错,
所以想用int型存11位的手机号是不行的,就算你设置int(100),同样存不进去,因为int类型占用4字节,存不了这么大的数据.
总结:
无符号int型,存储数据大小跟括号里的数字无关.
但是char,varchar 和 int不同.
name字段为varchar(1),只能存放一个字符,多余的部分会舍去.
sex字段为char(1),也只能存放一个字符,多余的部分会舍去.
可见char和varchar括号中的数字,表示该字段能存放的最大字符数.
myslq手册里有一张图,解释char和varchar的区别:
可见,定义char(4),即使存储的内容不到4个字节,系统会自动用空格补齐,难免会造成磁盘空间浪费,而且取出数据时需要去掉数据后边的空格,
优点是,数据定长,执行速度快.
对于varchar(4),会有1字节的前缀,即使内容为空也会占用一个字节,可变长度的优点是节省空间,缺点是执行效率相对较慢.
一般用varchar,如果可以确定数据的长度,比如存放MD5加密的密码,固定32位,可以存成char(32).