【问题标题】:Is it okay to store money as decimal(22,2) in MySQL?可以在 MySQL 中将钱存储为十进制(22,2)吗?
【发布时间】:2011-07-09 06:31:28
【问题描述】:

可以在 MySQL 中将货币值存储为 decimal(22,2) 吗?我正在为虚拟世界编写基于网络的市场和广告网络。

【问题讨论】:

    标签: mysql sqldatatypes


    【解决方案1】:

    如果有人有六亿美元怎么办?!?田野容不下这么大的一堆 本杰明……

    不过说真的,SQL Server 和 PostgreSQL 有一个货币数据类型,而 Access 有一个货币数据类型。 Oracle 和 MySQL 都没有。

    这个帖子 - Best data type for storing currency values in a MySQL database

    但是出于某种原因建议使用 4 位有效数字,我想以防您需要小数美分(股票等)。

    如果没有用户可以拥有超过六亿美元(严肃地说),并且您不需要计算美分的分数来进行存储,那么您的格式应该没问题。

    【讨论】:

    • 是的。我认为这会奏效。我怀疑有人在这个游戏中甚至有这么多钱!但我确实希望 MySQL 会添加一种货币类型。
    • 请记住,如果应用程序可以扩展以考虑其他货币,您可能需要超过 2 位数的精度。作为我所知道的最极端的例子,比特币使用 8 位精度。还有其他几个使用 3 位数字。
    【解决方案2】:

    您应该问自己“使用我的程序的人最多可以获得多少资金?”和“我需要小数位到什么精度?”

    如果您只需要处理多达 10 亿个,那么似乎 (10,2) 就足够了。如果您想要更精确的利息计算,也许您想要 (10,5)。如果您只是跟踪工资单和年薪,似乎 (7,2) 就足够了(我想参与 7 部分,谢谢!)

    在不知道数据用途的情况下,很难回答这个问题。我能给你的只是你必须问自己的问题。

    【讨论】:

      【解决方案3】:

      如果您将钱存储在数据库中,您可以使用 int 类型,但存储在最小值(美分换美元),然后在需要时除以 100。它会运行得更快。

      【讨论】:

        【解决方案4】:

        @Orbit 在此页面上接受的答案提到 SQL Server 具有 money 数据类型。

        但是,根据这个答案 (Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server?),在 SQL Server 中存储货币值的更好选择是 decimal(19,4) - 在 MySQL 中也可以使用。

        据我了解,由于浮点舍入错误,在使用 SQL Server 中的 money 类型执行计算时应该小心。而且它可能会间接使用decimal(19,4) 类型。

        所以...decimal(22,2) 类型可以很好地存储货币值...但是正如很多人似乎建议的那样,decimal(19,4) 会更好。

        【讨论】:

          猜你喜欢
          • 2010-12-15
          • 1970-01-01
          • 2013-05-13
          • 2021-12-26
          • 2018-11-20
          • 1970-01-01
          • 2016-07-05
          • 1970-01-01
          • 2015-03-09
          相关资源
          最近更新 更多