前言

用过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)可显示完整数据。但个人认为这种方式必要性不大。

附上实验的截图,显示宽度的作用和效果一目了然:
MySQL显示宽度与字段长度

显示宽度的问题,可参考官方文档:https://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html


以上。感谢您的阅读。

相关文章: