【发布时间】:2011-07-09 06:31:28
【问题描述】:
可以在 MySQL 中将货币值存储为 decimal(22,2) 吗?我正在为虚拟世界编写基于网络的市场和广告网络。
【问题讨论】:
标签: mysql sqldatatypes
可以在 MySQL 中将货币值存储为 decimal(22,2) 吗?我正在为虚拟世界编写基于网络的市场和广告网络。
【问题讨论】:
标签: mysql sqldatatypes
如果有人有六亿美元怎么办?!?田野容不下这么大的一堆 本杰明……
不过说真的,SQL Server 和 PostgreSQL 有一个货币数据类型,而 Access 有一个货币数据类型。 Oracle 和 MySQL 都没有。
这个帖子 - Best data type for storing currency values in a MySQL database
但是出于某种原因建议使用 4 位有效数字,我想以防您需要小数美分(股票等)。
如果没有用户可以拥有超过六亿美元(严肃地说),并且您不需要计算美分的分数来进行存储,那么您的格式应该没问题。
【讨论】:
您应该问自己“使用我的程序的人最多可以获得多少资金?”和“我需要小数位到什么精度?”
如果您只需要处理多达 10 亿个,那么似乎 (10,2) 就足够了。如果您想要更精确的利息计算,也许您想要 (10,5)。如果您只是跟踪工资单和年薪,似乎 (7,2) 就足够了(我想参与 7 部分,谢谢!)
在不知道数据用途的情况下,很难回答这个问题。我能给你的只是你必须问自己的问题。
【讨论】:
如果您将钱存储在数据库中,您可以使用 int 类型,但存储在最小值(美分换美元),然后在需要时除以 100。它会运行得更快。
【讨论】:
@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) 会更好。
【讨论】: