前言
用过MySQL的朋友,可能都见过int(4)这个写法。但你会发现,字段声明为int(4),但居然可以存储10000、100000甚至更大的数据。
实际上,MySQL数值类型是定长字段,如int的存储开销固定是4个字节。而int(4)的4就是显示宽度,仅表示存储值不足4位时、显示为4个字符的宽度。
关于MySQL所有字段的字段长度、存储开销,可参考《MySQL所有类型的长度范围、存储开销(区分显示宽度/有无符号)》
具体分析
MySQL的显示宽度,仅影响数字的显示,对数据存储没有影响。
- 显示宽度为可选扩展,可不写
- 显示宽度按字符数计算
- 存储数据不足显示宽度,用空格补齐;
- 与可选(非标准)的
ZEROFILL属性一起使用,默认的空格填充将替换为零;例如,列INT(4) ZEROFILL,值5将显示为0005 - 如果指定ZEROFILL数字列,MySQL会自动添加该UNSIGNED 属性
- 与可选(非标准)的
- 存储数据超过显示宽度,显示完整数据;
- 显示宽度可超过存储长度,按显示宽度补齐空位。
一般用于表示显示完整数据,比如
INT最大值10进制只有10位,因此INT(11)可显示完整数据。但个人认为这种方式必要性不大。
- 存储数据不足显示宽度,用空格补齐;
附上实验的截图,显示宽度的作用和效果一目了然:
显示宽度的问题,可参考官方文档:https://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html
以上。感谢您的阅读。