MySQL中的整数括号中属性的用途是什么?

时间:2012-05-10 18:43:00

标签: mysql sql types

根据文档,括号中的属性(例如SMALLINT(3)中的“3”)应该将SMALLINT值的显示约束为三位数。然而,当我插入五个测试数字(9,99,999,9999,99999)时,它将每个数字都取其全部值而不是将其加到三位数并相应地显示它(当然除了99999,它是上限为32767)。至少在显示时,数字是否应限制为三位数?或者我在这里错过了真正的目的吗?

2 个答案:

答案 0 :(得分:3)

the manual中所述:

  

M 表示整数类型的最大显示宽度。对于浮点和定点类型, M 是可以存储的总位数(精度)。对于字符串类型, M 是最大长度。 M 的最大允许值取决于数据类型。

此外,正如所述here

  

MySQL支持扩展,可以选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位的INT。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。 (也就是说,此宽度存在于使用结果集返回的元数据中。是否使用它取决于应用程序。)

     

显示宽度约束可以存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为SMALLINT(3)的列通常-32768范围为32767ZEROFILL,超出三位数允许范围的值将使用超过三位数。

     

与可选(非标准)属性5一起使用时,默认的空格填充将替换为零。例如,对于声明为SMALLINT的列,将0005的值检索为ZEROFILL

     
    

注意
    当列涉及表达式或INT(4) ZEROFILL查询时,将忽略ZEROFILL属性。

         

如果将大于显示宽度的值存储在具有UNSIGNED属性的整数列中,则在MySQL为某些复杂连接生成临时表时可能会遇到问题。在这些情况下,MySQL假定数据值符合列显示宽度。

  
     

所有整数类型都可以具有可选(非标准)属性UNSIGNED。无符号类型可用于仅允许列中的非负数,或者当您需要列的较大上限数字范围时。例如,如果UNION列为-2147483648,则列的范围大小相同,但其端点从21474836470更改为4294967295UNSIGNED

     

浮点和定点类型也可以是ZEROFILL。与整数类型一样,此属性可防止负值存储在列中。与整数类型不同,列值的上限范围保持不变。

     

如果为数字列指定UNSIGNED,MySQL会自动将AUTO_INCREMENT属性添加到列中。

     

整数或浮点数据类型可以具有附加属性NULL。将值0(推荐)或AUTO_INCREMENT插入索引value列时,该列将设置为下一个序列值。通常,这是 + 1 value,其中值是最大的 AUTO_INCREMENT 表示当前列中的列。 1序列以{{1}}开头。

答案 1 :(得分:2)

对于整数类型,该属性与显示宽度相关,只有在将zerofill添加到列create语句时才能看到该属性。

显示宽度不会影响分配给列的存储,只会影响启用zerofill时的填充显示。

另见解释:http://matthom.com/archive/2006/11/28/mysql-integer-columns-and-display-width