在MySQL中将钱存储为decimal(22,2)是否可行?

7

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

4个回答

16

如果有人拥有一亿亿美元怎么办?!?一个字段装不下这个巨额的钞票...

严肃地讲,SQL Server和PostgreSQL有货币数据类型,Access有货币数据类型,而Oracle和MySQL没有。

然而,这篇帖子 - 在MySQL数据库中存储货币值的最佳数据类型

出于某种原因建议使用4位有效数字,我想是为了存储分数美分(股票份额等)。

如果没有用户会有超过一亿亿美元(严肃地说),并且您不需要计算存储的美分部分,则您的格式应该非常好。


是的,我觉得这个会起作用。我怀疑在这个游戏中有人拥有那么多钱!但是我希望MySQL能够添加一个货币类型。 - Keverw
1
请记住,如果应用程序可能会扩展以考虑其他货币,您可能需要超过2位数字的精度。比特币作为我所知道的最极端的例子,使用8位数字精度。还有一些使用3位数字的货币。 - Brad Peabody

6
你应该问自己:“使用我的程序,某人最多会有多少钱?”以及“我需要多高的小数精度?”如果你只需要处理十亿以下的数字,那么(10,2)就足够了。如果你想要更高的利息计算精度,也许你需要(10,5)。如果你只是跟踪工资和年薪,那么(7,2)就足够了(而我希望在这个7的范围内,谢谢!)没有了解到数据的用途,很难回答这个问题。我能给你的只是你必须问自己的问题。

2

如果您需要在数据库中存储货币,可以使用int类型,但将其存储为最小值(美元的分),然后在需要时只需除以100即可。这样做会提高效率。


0

这个页面上@Orbit的被接受的答案提到了SQL Server有一个money数据类型。

然而,根据这个答案(在SQL Server中应该选择MONEY还是DECIMAL(x,y)数据类型?),在SQL Server中存储货币值的更好选择是decimal(19,4) - 这也适用于MySQL。

据我所知,在使用SQL Server中的money类型进行计算时,应当小心浮点舍入误差。而且它可能会间接地使用decimal(19,4)类型。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接