1

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

4

2 回答 2

3

手册所述:

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

此外,如此所述:

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

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

当与可选(非标准)属性结合使用时ZEROFILL,空格的默认填充将替换为零。例如,对于声明为 的列,检索INT(4) ZEROFILL的值为。50005

注意当列涉及表达式或查询时,将忽略
该属性。ZEROFILLUNION

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

所有整数类型都可以有一个可选(非标准)属性UNSIGNED。无符号类型可用于在列中仅允许非负数,或者当您需要该列的较大数值范围时。例如,如果一INT列是UNSIGNED,则该列范围的大小是相同的,但它的端点从-21474836482147483647向上移动到04294967295

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

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

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

于 2012-05-10T18:47:21.000 回答
2

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

显示宽度不影响分配给列的存储空间,仅在启用 zerofill 时填充显示。

另请参阅此说明: http: //matthom.com/archive/2006/11/28/mysql-integer-columns-and-display-width

于 2012-05-10T18:56:17.080 回答