DECIMAL(x,0)有什么用?

时间:2012-05-15 13:54:41

标签: mysql

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

是否有一个微妙的原因,我错过了0的选项?小数点后是否为小数点后不是小数的整数?

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

4 个答案:

答案 0 :(得分:8)

DECIMAL type的数字范围远大于INTEGER或BIGINT。你能够在DECIMAL(65,0)中存储的最大数字是65个9。 BIGINT中最大的数字是18446744073709551615。

对于小数字,DECIMAL(x,0)通常要贵一点。如果您的数字在其中一个范围内,请考虑使用已定义的INTEGER type


根据以下公式,DECIMAL(x,0)字段的存储要求(以字节为单位)取决于x

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

您可以在MySQL手册中阅读有关存储requirements for numeric types的更多信息,并自行比较。

答案 1 :(得分: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个字节)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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