Bri*_*her 208 mysql sql sqldatatypes
货币值的最佳SQL数据类型是什么?我正在使用MySQL,但更喜欢数据库独立类型.
Kib*_*bee 224
喜欢的东西Decimal(19,4)
通常工作得很好,在大多数情况下.您可以调整比例和精度,以满足您需要存储的数字的需要.即使在SQL Server中,我倾向于不使用" money
",因为它是非标准的.
Sea*_*nJA 48
您唯一需要注意的是,如果您从一个数据库迁移到另一个数据库,您可能会发现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)
Sco*_*son 17
阿萨夫的回应
取决于你得到多少钱......
听起来很轻浮,但实际上它是相关的.
直到今天我们还有一个问题,即记录未能插入到我们的费率表中,因为其中一列(GrossRate)设置为十进制(11,4),而我们的产品部门刚刚在一些令人惊叹的度假村获得了房间合同在波拉波拉岛,每晚出售数百万太平洋法郎......这在10年前设计数据库架构时从未被反对过.
Lea*_*eah 17
计算出计算所需的小数位数也很重要.
我参与了股票价格申请,要求计算一百万股的价格.报价的股价必须存储到7位精度.
dan*_*neb 11
对于会计应用程序,将值存储为整数是非常常见的(有些甚至可以说它是唯一的方法).要了解一下,请考虑交易金额(假设为100.23美元)和100,1000,10000等倍数,以获得所需的准确性.因此,如果您只需要存储美分并且可以安全地向上或向下舍入,则只需乘以100.在我的示例中,这将使10023成为要存储的整数.您将节省数据库中的空间,并且比较两个整数比比较两个浮点数要容易得多.我的0.02美元.
超级晚进入,但GAAP是一个很好的经验法则..
如果您的申请需要处理高达万亿的货币价值,那么这应该有效:13,2如果您需要遵守GAAP(公认会计原则),那么使用:13,4
通常,在将输出舍入到13,2之前,您应该将您的货币值加总为13,4.
小智 6
这取决于数据的性质。你需要事先考虑清楚。
尽管 MySQL 允许您使用小数 (65,30),但如果我们想要让传输选项保持打开状态,那么 31 表示比例和 30 表示精度似乎是我们的限制。
最常见的 RDBMS 中的最大规模和精度:
精密秤 甲骨文 31 31 T-SQL 38 38 MySQL 65 30 PostgreSQL 131072 16383
2015 年 9 月津巴布韦政府表示将以 1 美元兑 35 万亿津巴布韦元的汇率将津巴布韦元兑换成美元5
我们倾向于说“是的,当然......我不需要那些疯狂的数字”。嗯,津巴布韦人也常这么说。不久前。
假设您需要以津巴布韦元记录一笔 100 万美元的交易(今天可能不太可能,但谁知道 10 年后会是什么样子?)。
- (100 万美元) * (35 Quadrylion ZWL) = ( 10^6 ) * (35 * 10^15) = 35 * 10^21
- 我们需要:
- 2 位数字来存储“35”
- 21 位数字来存储零
- 小数点右边4位
- 这使得 decimal(27,4) 为每个条目花费我们 15 个字节
- 我们可以免费在左边再增加一位数字 - 我们有十进制(28,4)为 15 个字节
- 现在我们可以存储以津巴布韦元表示的 1000 万美元交易,或者避免再次发生恶性通货膨胀,这希望不会发生