9

在 DECIMAL(M, D) 列中,MySQL 提供了 D 范围为 0 到 30 的选项。

是否有一个微妙的原因让我错过了 0 的选项?小数点后没有任何内容的小数不是整数吗?

何时以及为什么要指定没有小数位的 DECIMAL?

4

4 回答 4

8

DECIMAL 类型的数字范围比 INTEGER 或 BIGINT 大得多。您可以在 DECIMAL(65, 0) 中存储的最大数字是 65 个九。BIGINT 中的最大数字是 18446744073709551615。

DECIMAL(x, 0) 对于小数字来说通常要贵一些。如果您的数字在其中之一的范围内,请考虑使用定义的INTEGER 类型。


DECIMAL(x, 0) 字段的字节存储要求取决于x以下公式:

Storage = x / 9 + Leftover
Leftover = round_up((x % 9) / 2) (i.e., about half of the leftover digits)

您可以在 MySQL 手册中阅读有关数字类型存储要求的更多信息并自行比较。

于 2012-05-15T14:09:08.107 回答
2

除了允许存储大于 的值外,如果您愿意BIGINT,还可以使用:DECIMAL(x,0)

  • 允许范围内的值-9, ... , +9:使用DECIMAL(1,0)(使用 1 个字节)

  • 允许范围内的值-99, ... , +99:使用DECIMAL(2,0)(使用 1 个字节)

  • 允许范围内的值-999, ... , +999:使用DECIMAL(3,0)(使用 2 个字节)

  • 允许范围内的值-9999, ... , +9999:使用DECIMAL(4,0)(使用 2 个字节)

...

  • 允许范围内的值-999999999, ... , +999999999:使用DECIMAL(9,0)(使用 4 个字节)

...等(最多DECIMAL(65,0)使用 29 个字节)

于 2012-05-15T14:17:24.037 回答
1

在 biging 中,您只能存储不大于 18 446 744 073 709 551 615 的数字。这是 20 位,但在 DECIMAL 中,您甚至可以指定要存储的 65 位。同样使用 int 你不能直接将位数限制为一个低数字(例如一个)。所以它更灵活,如果你需要在现有的数据库上扩展它,那就更容易了。

于 2012-05-15T14:13:09.483 回答
1

在 Mysql 中,Decimal(3,2) 表示总共 3 位数字和小数点后 2 位数字,如 3.42

Decimal(3,0) 表示总共 3 位,小数点后没有数字,如 345 即使你在小数的括号中写了超出给定范围的内容,Mysql 也会自动将它们更新为 000 或 999。

于 2021-03-26T11:46:08.023 回答