以前一直以为MySQL中int类型的长度代表允许存储的最大宽度,今天才发现这样是大错特错的!!!
结论:
- "浮点型"的长度是用来限制数字存储范围的. 比如
float(3,2)
只能够写入0.00~999.99
. - "整型"的长度并不会限制存储的数字范围. 比如,
int
和int(3)
的存储范围都是-2147483648 ~ 2147483647
,int unsigned
和int(3) unsigned
的存储范围都是0 ~ 4294967295
. - "整型"的长度实际上可以理解为"显示长度", 如果该字段开启 "Zerofill/补零"就能很明显地知道它的作用.
下面举一个例子:
备注:使用navicat创建字段和添加值是为了方便,真实结果要通过数据库操作界面查看。
1.用navicat工具在一个表中定义了三个字段如下:
- test_filed_a字段类型为int(1),没有勾选填充零。
- test_filed_b字段类型为int(3),没有勾选填充零。
- test_filed_c字段类型为int(11),勾选了填充零(Zerofill/补零功能)。
2.用navicat工具给3个字段添加这些值:
3.结果如下:
综上得出以下结论:
- test_field_a字段类型为int(1),却可以存储10,100,1000这样的数字,可见int(1)中的1代表的不是最大展示宽度。
- test_field_b字段类型为int(3),却可以存储1000这样的数字,可见int(3)中的3代表的不是最大展示宽度。
- test_field_c字段类型为int(11),Zerofill/补零功能,存储的数字1,10,100,1000都在原基础上左侧补0补到了11位。
- 可以猜测如果test_field_b字段类型为int(3),Zerofill/补零功能,那么存储的数字1,10显示结果为001,010。
至此得出总结!