有如下的mysqlbiaojiegou/ target=_blank class=infotextkey>mysql表结构:
对于test表字段中的typeId 后面的 int(2)中的2代表的到底是什么含义。
可能会想到是varchar(2)后面的2代表为两个字节,也就不难把int后的2误认为2位即typeId的最大存入的数为99【俺以前也一直这么认为的】 。
对于数值类型只能在100内的字段忘记作校验就给插入数据库,测试时把一个千位数插入,竟然插入并且数据库中数据也正确。
第一反应是测试服务器的表创建错误,检查一遍没有啊。回到本地也测试了下发现也存在这个问题。
对于mysql的int来说它的长度是不变的及为4个字节、对于插入数据数据大小也是不变的。
带符号的数值大小范围为:-2147483648 到214748347
无符号的:0到4294967295
int(x)的x并不能改变int类型字段存入数据值的大小【即不能限制数值的范围】
例子,int(2)能存入214748347。
int(1)也能存入214748347。
使用test表:
insert into test value( 214748347
);
int(2)能插入214748347。
那int(x)的x到底是什么,x为期望显示数据的列宽。
期望列宽干什么用,这个是和mysql的另外的关键字zerofill一起使用
zerofill 含义代表为未到达宽度x的前填充0【或称为0补位】,超出x代表宽度的数值按原样显示。
备注:zerofill自动将int标示为无符号的类型
无该关键代表不填充,按原值显示。
例子,
mysql中的TINYINT、SMALLINT等数据类型都是这样表示。
1)、可以看出mysql对于数值类型来说不管是多大的数它的存储大小没有改变【该占几个字节还是占几个字节,不因期望存储宽度即x而改变】,所以开发时选择合适的数值类型能用小的存储位数的就用小的。
2)、对于数字类型该校验的还是要校验,否则容易出现此类问题.