前言
此次学习已innodb引擎、utf8字符集为参考配置
SMALLINT
smallint(M),M只是显示宽度,并不是指定存储值的数值范围,如果数值的宽度没有超过M,那么会在数值左边填充0值(使用zerofill属性可以设置填充0功能,这个需要根据业务需要设置,但是MySQL 8.0.17已废弃),如果数值的宽度超过了M,并且没有超过smallint的值范围(-32768 to 32767,-2的15次方至 2的15次方-1)
CHAR
每个列已固定长度声明,长度范围是0-255个字符,如果长度不够,则会从右边填充空格,当CHAR的数值被遍历时,追加的空格将会被删除,除非开启PAD CHAR TO FULL LENGTH模式被开启
VARCHAR
声明一个长度表明你想存储最大数量字符串,例如VARCHAR(30)表示能够存储30个字符的长度
列数量限制
MySql最多有4096个列的强制限制,具体最大限制受一些因素的影响
行容量限制
每一行最大容量限制是655355个字节,每个字段的大小如果超过了255个字节的话,将会有两个字节的存储字段的长度,而这两个字节会计算至整个行占用的空间大小中,计算整个行大小的时候需要把这个影响因素加进去
CHAR和VARCHAR存储占用的空间区别
M表示字符串长度,w表示每个字符占用的字节个数,x表示用于表明字段时间长度的字节数(255个以内占用1个字节,超过255占用2个字节),L表示实际存储的值的字符的个数。
char(M)类型的字段,实际占用的空间是Mw+x
varchar(M)类型的字段,实际占用的空间是LM+x
综上,也就是说char的占用的空间是固定的,值是否达到M,都会占用M*w+x的空间,而varchar就不一样了,占用的空间是可变的,和存储的值有关系。