货币值的最佳SQL数据类型是什么?我正在使用MySQL,但更喜欢数据库独立类型.
喜欢的东西Decimal(19,4)
通常工作得很好,在大多数情况下.您可以调整比例和精度,以满足您需要存储的数字的需要.即使在SQL Server中,我倾向于不使用" money
",因为它是非标准的.
您唯一需要注意的是,如果您从一个数据库迁移到另一个数据库,您可能会发现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)
阿萨夫的回应
取决于你得到多少钱......
听起来很轻浮,但实际上它是相关的.
直到今天我们还有一个问题,即记录未能插入到我们的费率表中,因为其中一列(GrossRate)设置为十进制(11,4),而我们的产品部门刚刚在一些令人惊叹的度假村获得了房间合同在波拉波拉岛,每晚出售数百万太平洋法郎......这在10年前设计数据库架构时从未被反对过.
计算出计算所需的小数位数也很重要.
我参与了股票价格申请,要求计算一百万股的价格.报价的股价必须存储到7位精度.
对于会计应用程序,将值存储为整数是非常常见的(有些甚至可以说它是唯一的方法).要了解一下,请考虑交易金额(假设为100.23美元)和100,1000,10000等倍数,以获得所需的准确性.因此,如果您只需要存储美分并且可以安全地向上或向下舍入,则只需乘以100.在我的示例中,这将使10023成为要存储的整数.您将节省数据库中的空间,并且比较两个整数比比较两个浮点数要容易得多.我的0.02美元.
超级晚进入,但GAAP是一个很好的经验法则..
如果您的申请需要处理高达万亿的货币价值,那么这应该有效:13,2如果您需要遵守GAAP(公认会计原则),那么使用:13,4
通常,在将输出舍入到13,2之前,您应该将您的货币值加总为13,4.
来源:在MySQL中存储货币价值的最佳数据类型
您可以使用DECIMAL(19,2)
默认情况下的所有货币值,但如果您只存储低于1,000美元的值,那么这将浪费宝贵的数据库空间.
对于大多数实现来说,DECIMAL(N,2)
就足够了,其中值N
至少是.
您希望存储在该字段中的最大总和之前的位数+ 5
.因此,如果您不希望存储任何大于999999.99的值,那么DECIMAL(11,2)
应该绰绰有余(直到期望发生变化).
如果您希望符合GAAP标准,那么您可以使用DECIMAL(N,4)
,其值N
至少是.
您希望存储在该字段中的最大金额之前的位数+ 7
.