针对MySQL5.x以上的版本
针对MySQL5.x以上的版本
针对MySQL5.x以上的版本
一.int(5)的含义
int类型数据的字节大小是固定的4个字节;
但是int(5)和int(11)区别在于,显示的数据位数一个是5位一个是11位,在开启zerofill(填充零)情况下,若int(5)存储的数字长度是小于5的则会在不足位数的前面补充0,但是如果int(5)中存储的数字长度大于5位的话,则按照实际存储的显示(数据大小在int类型的4个字节范围内即可),也就是说int(M)的M不代表数据的长度;
int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;
二.int(5)的意义
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
这句话的意思是说,int后面的数字描述的的实际上可以理解为”显示长度”, 如果该字段开启 “Zerofill/补零”就能很明显地知道它的作用.
三.varchar(20)的含义
mysql 5.X 以上的版本的 定义中 表示的字符长度,如上varchar(20)你既可以添加20个英文字符,也可以添加二十个中文字符。 表示的字符长度
varchar(20)中的20表示的是varchar数据的数据长度最大是20,超过则数据库不会存储;
varchar(M) M表示的是varchar类型数据在数据库中存储的最大长度,超过则不存;
四.varchar(20)的意义
使用varchar(20)和varchar(200)存储‘hello’的空间开销是一样的,那么使用更短的列有什么优势吗?
事实证明有很大的优势。更长的列会小号更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。尤其是在使用内存临时表
进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。
所以最好的策略是只分配真正需要的空间。