根据文档,括号中的属性(例如 SMALLINT(3) 中的“3”)应该将 SMALLINT 的值的显示限制为三位数。但是,当我插入五个测试数字(9、99、999、9999、99999)时,它会取每个数字的全部值,而不是将其限制在三位数字上并相应地显示(当然,除了 99999,它上限为 32767)。至少在显示时,数字不应该被限制为三位数吗?还是我错过了这里的真正目的?
2 回答
如手册所述:
M
表示整数类型的最大显示宽度。对于浮点和定点类型,M
是可以存储的总位数(精度)。对于字符串类型,M
是最大长度。的最大允许值M
取决于数据类型。
此外,如此处所述:
MySQL 支持扩展,用于在类型的 base 关键字后面的括号中可选地指定整数数据类型的显示宽度。例如,
INT(4)
指定INT
显示宽度为四位的 an。应用程序可以使用这个可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。(也就是说,这个宽度存在于与结果集一起返回的元数据中。是否使用它取决于应用程序。)显示宽度不限制可以存储在列中的值的范围。它也不会阻止正确显示比列显示宽度更宽的值。例如,指定为 as 的列
SMALLINT(3)
的通常SMALLINT
范围为-32768
to32767
,超出三位数字允许的范围的值将使用三位以上的数字完整显示。当与可选(非标准)属性结合使用时
ZEROFILL
,空格的默认填充将替换为零。例如,对于声明为 的列,检索INT(4) ZEROFILL
的值为。5
0005
注意当列涉及表达式或查询时,将忽略
该属性。ZEROFILL
UNION
如果您在具有该属性的整数列中存储大于显示宽度的值
ZEROFILL
,当 MySQL 为某些复杂的连接生成临时表时,您可能会遇到问题。在这些情况下,MySQL 假定数据值适合列显示宽度。所有整数类型都可以有一个可选(非标准)属性
UNSIGNED
。无符号类型可用于在列中仅允许非负数,或者当您需要该列的较大数值范围时。例如,如果一INT
列是UNSIGNED
,则该列范围的大小是相同的,但它的端点从-2147483648
和2147483647
向上移动到0
和4294967295
。浮点和定点类型也可以是
UNSIGNED
. 与整数类型一样,此属性可防止将负值存储在列中。与整数类型不同,列值的上限保持不变。如果您
ZEROFILL
为数字列指定,MySQL 会自动将该UNSIGNED
属性添加到该列。整数或浮点数据类型可以具有附加属性
AUTO_INCREMENT
。当您将值NULL
(推荐)或0
插入索引AUTO_INCREMENT
列时,该列将设置为下一个序列值。通常这是,其中 value 是表中当前列的最大值。序列以.value
+ 1
value
AUTO_INCREMENT
1
对于整数类型,该属性与显示宽度有关,并且只有在将 zerofill 添加到列创建语句时才能看到。
显示宽度不影响分配给列的存储空间,仅在启用 zerofill 时填充显示。
另请参阅此说明: http: //matthom.com/archive/2006/11/28/mysql-integer-columns-and-display-width