在DECIMAL(M,D)列中,MySQL提供D范围为0到30的选项。
是否有一个微妙的原因,我错过了0的选项?小数点后是否为小数点后不是小数的整数?
我何时以及为什么要指定一个没有小数位的DECIMAL?
答案 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。