括号中的数字究竟是什么意思?

luc*_*axi 27 mysql sql

我一直认为括号中的数字代表字段长度?但是,据我所知,并非总是如此.也许这是一个mysql问题?有人告诉我,如果我将字段设置为9个字符长,我可以添加一个超过9个字符的值,但只保存前9个字符.

示例......

create table "person" ( id INT, age INT(2));
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,我不应该为年龄选择像TINYINT而不是INT这样的东西吗?

Pek*_*ica 43

INT(2)将生成一个最小显示宽度为2的INT :

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

显示宽度不会限制可以存储在列中的值的范围.它也不会阻止比列显示宽度更宽的值正确显示.例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三位数允许的范围之外的值将使用三位数以上的方式完整显示.

这并不会影响可被存储在该字段可能值的范围内; 它也不是用于存储它的字节数.除非ZEROFILL使用(参见链接页面),否则似乎只是建议应用程序如何显示值.

无符号TINYINT(0 ... 255)可能也会这样做,除非冷冻保存在应用程序的生命周期中向前迈出了一大步.

  • @Pekka你的链接已经腐烂了.页面仍然存在,但不再包含任何单词"minimum","display"或"width".看起来他们已将其移至[概述](http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html)页面.我本来会提出一个编辑,但我不知道如何处理你引用的原始文本.这似乎值得我留意. (3认同)