【问题标题】:Storing small decimals MySQL存储小数 MySQL
【发布时间】:2012-11-17 00:59:34
【问题描述】:

我需要存储大量的小数位数(小数点前3位,小数点后6位)。

根据我对规范的理解,这将需要 8 个字节。我可以将数字存储为只需要 4 个字节的 int 并在检索后使用固定比例因子进行转换。

有没有更好的替代方法而不是使用 int,我不能轻松地对数字进行任何算术运算?

谢谢。

【问题讨论】:

  • 任何理由DECIMAL(3,6) 不符合要求?
  • 另外,9 位有效数字是 0 到 10^10 - 1 的范围,而 4 字节无符号整数涵盖 0 到 2^32 - 1
  • @Jon: DECIMAL(9,6) 你会说
  • 是的...因为十进制使用 8 个字节,这意味着表格的大小几乎是两倍。

标签: mysql decimal


【解决方案1】:

我不认为这是正确的。 DECIMAL(9,6) 应该可以完成这项工作。 根据 mysql 5.1 手册,3 位数字需要 2 个字节,6 位数字需要 3 个字节。恕我直言,总共是 5 个字节而不是 8 个字节。 因此,与您建议的整数“黑客”相比,您不需要更多的内存。在你的情况下,我肯定会使用小数。

【讨论】:

    【解决方案2】:

    不,如果您使用 MySQL 的“int”数据类型,它将不起作用。这是因为整数不能处理小数精度。

    根据您的问题,您应该使用“Fixed Point Data Types”,这将有利于您进行大型计算和货币数据。在 MySQL 中,所需的数据类型是“DECIMAL”,您可以阅读更多关于它的信息here

    在您的情况下,正确的语法是“DECIMAL (9, 6)”,其中 9 表示总共可以存储最多 9 位的值,其中 6 位在小数点之后,3 位在小数点之前.

    希望对你有帮助。

    【讨论】:

    • 您也可以使用普通整数进行定点数学运算。你只是失去了范围以换取用整数模拟浮点数,再加上必须进行各种转换和范围检查的所有麻烦。并不是说这是可取的,只是说这是可能的。
    • @Marc - 非常感谢您让我知道这一点。 +1 :)
    • 我的重点是我不想使用十进制,因为它使用 8 个字节......如果我按照 Marc B 的建议进行转换,数据可以很容易地放入 int 中。我有点希望有一些聪明的选择,但看起来不像。我可以使用十进制并需要双倍的存储空间,或者我可以使用 int 但必须进行所有转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多