int类型:
int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 :
int ------- int(11)
bigint ------- bigint(20)
smallint ------- smallint(6)
tinyint ------- tinyint(4)
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。int(M) 在 integer 数据类型中,M 表示最大显示宽度,该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系, int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。
上面几种类型的存储范围见下图:
如何计算一个字节能够存储的整数位数?
一个字节8位,无符号的可以从0000 0000(0)到1111 1111(2^8-1=255)
有符号:有一位表示符号位(1表示负,0表示正)
正数:0 000 0000到0 111 1111(2^7-1=127,第一位0表示正)。
负数:从1 000 0000到1 111 1111(-(2^7-1)=-127)
负数在计算机中用补码表示-0的补码为0000 0000与 0的表示一致,所以用0000 0000表示 0和-0。所以1 000 0000不表示-0而表示-128。
2个字节有16位,无符号从0000 0000 0000 0000(0)到1111 1111 1111 1111(2^16-1) 有符号:(-2^15到2^15-1)
mysql中设置varchar长度的问题?
如果某一项中设置的是varchar(50),那么对英文当然是50,那么对中文呢?utf-8的中文占3个字节,那么这个varchar(50)是不是只能存16个汉字了?
mysql varchar(50) 不管中文 还是英文 都是存50个的