货币值的最佳 SQL 数据类型是什么?我正在使用 MySQL,但更喜欢独立于数据库的类型。
原文由 Brian Fisher 发布,翻译遵循 CC BY-SA 4.0 许可协议
货币值的最佳 SQL 数据类型是什么?我正在使用 MySQL,但更喜欢独立于数据库的类型。
原文由 Brian Fisher 发布,翻译遵循 CC BY-SA 4.0 许可协议
这取决于数据的性质。你需要事先考虑清楚。
虽然 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 个字节
- 我们可以免费在左边添加一位数字 - 我们有 15 个字节的小数(28,4)
- 现在我们可以存储以津巴布韦元表示的 1000 万美元交易,或者避免再次出现过度通胀,希望这种情况不会发生
原文由 kshishkin 发布,翻译遵循 CC BY-SA 3.0 许可协议
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答1.8k 阅读
在大多数情况下,像
Decimal(19,4)
这样的东西通常效果很好。您可以调整比例和精度以适应您需要存储的数字的需要。即使在 SQL Server 中,我也倾向于不使用“money
”,因为它是非标准的。