【发布时间】:2018-03-21 09:28:48
【问题描述】:
在 SQL 数据库中存储货币值时关于数据类型的臭名昭著的问题。
然而,在这些艰难时期,我们现在拥有价值高达小数点后 18 位的货币(感谢 ETH)。
这又重新提出了经典论点。
想法
选项1 BIGINT用一个大整数保存实际值,然后存储货币有多少个小数位(简单地将A除以10^B翻译)?
选项 2 Decimal(60,30) 将数据类型存储为大十进制,这不可避免地会占用大量空间。
选项 3 VARCHAR(64) 存储在字符串中。这会对性能产生影响。
我想知道人们在处理加密货币价值时的想法以及他们在使用什么。因为我不知道如何进行的最佳方法。
【问题讨论】:
-
赞成,但我认为这一直是处理大量交易的大型金融机构的问题。我想知道他们如何处理这件事?我的猜测是大号
DECIMAL。 -
这个问题太宽泛了,因为答案很大程度上取决于您将用于处理数据的算法以及您需要的性能。作为一般规则,我认为基于字符串 (
VARCHAR) 和使用DECIMAL计算的算法会很慢,但与使用BIGINT组合的一些快速但棘手的方法相比,可以更容易理解和DOUBLE,两个双打或其他类型。 -
如果您必须以与银行完全相同的方式进行舍入,那么您不仅需要正确的小数位数,还需要了解舍入规则。你真正的目标是什么?如果它正在跟踪“股票”,
DOUBLE,大约 16 个有效位的精度可能绰绰有余。
标签: mysql sql currency sqldatatypes