0

根据这个(荷兰语)网页SMALLINT,如果预期的数字不会超过 9999(4 位),应该使用,因为INT会保留太多的系统资源(免费解释)。但是,如果数字是有限的,这仍然算数吗,如SMALLINT(4)INT(4)

4

2 回答 2

2

首先,a 的上限SMALLINT不是 9999 而是 32767 - 数字不是以十进制存储的,因此数字的十进制表示中的位数无关紧要。因此,虽然它是用于不超过 9999 的数字的正确类型,但它也是用于不超过 19999 的数字的正确类型。

其次,每种类型所需的存储在描述类型的 MySQL 手册页中给出。更大的类型肯定会预留更多的资源;他们是否储备太多是另一回事。

INT(4)您提到的语法是 MySQL 特定的功能,在手册中的Numeric Type Attributes下单独讨论。根据该页面,它表示“显示宽度”,以数字为单位,限制显示值时的最小宽度。它特别指出“显示宽度不限制可以存储在列中的值的范围。” 因此无法根据该提示向下调整分配的存储空间。

于 2013-05-15T22:36:29.280 回答
1

在回答你的问题 Frank 之前,让我们看一下类型的大小:

tinyint: 1 byte, -128 to +127 / 0 to 255 (unsigned)
smallint: 2 bytes, -32,768 to +32,767 / 0 to 65,535 (unsigned)
mediumint: 3 bytes, -8,388,608 to 8,388,607 / 0 to 16,777,215 (unsigned)
int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647 / 0 to 4,294,967,295 (unsigned)
bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 / 0 to 18,446,744,073,709,551,615 (unsigned)

每次使用 INT(4)、INT(3)、INT(1) 时,括号中的数字与存储无关,而是您要显示/输出多少。它与存储因素无关。这意味着, 183542 仍将保留在 INT(2) 字段中。

于 2013-05-15T22:26:28.267 回答