在 DECIMAL(M, D) 列中,MySQL 提供了 D 范围为 0 到 30 的选项。
是否有一个微妙的原因让我错过了 0 的选项?小数点后没有任何内容的小数不是整数吗?
何时以及为什么要指定没有小数位的 DECIMAL?
在 DECIMAL(M, D) 列中,MySQL 提供了 D 范围为 0 到 30 的选项。
是否有一个微妙的原因让我错过了 0 的选项?小数点后没有任何内容的小数不是整数吗?
何时以及为什么要指定没有小数位的 DECIMAL?
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 手册中阅读有关数字类型存储要求的更多信息并自行比较。
除了允许存储大于 的值外,如果您愿意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 个字节)
在 biging 中,您只能存储不大于 18 446 744 073 709 551 615 的数字。这是 20 位,但在 DECIMAL 中,您甚至可以指定要存储的 65 位。同样使用 int 你不能直接将位数限制为一个低数字(例如一个)。所以它更灵活,如果你需要在现有的数据库上扩展它,那就更容易了。
在 Mysql 中,Decimal(3,2) 表示总共 3 位数字和小数点后 2 位数字,如 3.42
Decimal(3,0) 表示总共 3 位,小数点后没有数字,如 345 即使你在小数的括号中写了超出给定范围的内容,Mysql 也会自动将它们更新为 000 或 999。