当前位置:  开发笔记 > 后端 > 正文

用于在MySQL数据库中存储货币值的最佳数据类型

如何解决《用于在MySQL数据库中存储货币值的最佳数据类型》经验,为你挑选了7个好方法。

货币值的最佳SQL数据类型是什么?我正在使用MySQL,但更喜欢数据库独立类型.



1> Kibbee..:

喜欢的东西Decimal(19,4)通常工作得很好,在大多数情况下.您可以调整比例和精度,以满足您需要存储的数字的需要.即使在SQL Server中,我倾向于不使用" money",因为它是非标准的.


关于大小的一点:根据MSDN(http://msdn.microsoft.com/en-us/library/ms187746.aspx),十进制(10,4)和十进制(19,4)都使用9个字节的存储空间,所以不妨为额外的9位数量的弹簧.
使用`(19,4)`代替`(19,2)`有什么好处?

2> SeanJA..:

您唯一需要注意的是,如果您从一个数据库迁移到另一个数据库,您可能会发现DECIMAL(19,4)和DECIMAL(19,4)意味着不同的东西

(http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html)

    DBASE: 10,5 (10 integer, 5 decimal)
    MYSQL: 15,5 (15 digits, 10 integer (15-5), 5 decimal)



3> Scott Fergus..:

阿萨夫的回应

取决于你得到多少钱......

听起来很轻浮,但实际上它是相关的.

直到今天我们还有一个问题,即记录未能插入到我们的费率表中,因为其中一列(GrossRate)设置为十进制(11,4),而我们的产品部门刚刚在一些令人惊叹的度假村获得了房间合同在波拉波拉岛,每晚出售数百万太平洋法郎......这在10年前设计数据库架构时从未被反对过.


这就是我推荐小数(19,4)的原因.可能听起来有点矫枉过正,但你永远不知道什么时候你需要在那个领域存储大量的东西.
@Kibbee:直到今天我都不同意你的要求.(6年(11,4)非常好......)

4> Leah..:

计算出计算所需的小数位数也很重要.

我参与了股票价格申请,要求计算一百万股的价格.报价的股价必须存储到7位精度.


这是一个好点 - 特别是在金融应用程序中,"价格"肯定并不意味着"钱"

5> 小智..:

对于会计应用程序,将值存储为整数是非常常见的(有些甚至可以说它是唯一的方法).要了解一下,请考虑交易金额(假设为100.23美元)和100,1000,10000等倍数,以获得所需的准确性.因此,如果您只需要存储美分并且可以安全地向上或向下舍入,则只需乘以100.在我的示例中,这将使10023成为要存储的整数.您将节省数据库中的空间,并且比较两个整数比比较两个浮点数容易得多.我的0.02美元.


这怎么会比'DECIMAL`更好?在适当的时候,你需要非常小心地将便士,磨坊或者毫克翻译成美元.

6> Damian..:

超级晚进入,但GAAP是一个很好的经验法则..

如果您的申请需要处理高达万亿的货币价值,那么这应该有效:13,2如果您需要遵守GAAP(公认会计原则),那么使用:13,4

通常,在将输出舍入到13,2之前,您应该将您的货币值加总为13,4.

来源:在MySQL中存储货币价值的最佳数据类型



7> John Slegers..:

您可以使用DECIMAL(19,2)默认情况下的所有货币值,但如果您只存储低于1,000美元的值,那么这将浪费宝贵的数据库空间.

对于大多数实现来说,DECIMAL(N,2)就足够了,其中值N至少是.您希望存储在该字段中的最大总和之前的位数+ 5.因此,如果您不希望存储任何大于999999.99的值,那么DECIMAL(11,2)应该绰绰有余(直到期望发生变化).

如果您希望符合GAAP标准,那么您可以使用DECIMAL(N,4),其值N至少是.您希望存储在该字段中的最大金额之前的位数+ 7.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有