Cloud Spanner是否提供NUMERIC类型

时间:2018-09-08 18:00:39

标签: google-cloud-platform google-cloud-spanner

我有一个存储货币金额的应用程序。我想将其存储在Cloud Spanner中。由于well-known problems具有浮点精度,因此使用FLOAT64是危险的。

其他数据库为此类型的用例提供了NUMERIC类型。我应该在Cloud Spanner中做什么?

2 个答案:

答案 0 :(得分:2)

Cloud Spanner不提供NUMERIC类型或DECIMAL类型。

一种解决方法是将数量存储在INT64列中,并将它们存储在将要使用的最细粒度单位中。例如,如果您使用美元交易,则可以以美分(0.01美元)存储数量。因此,7.13美元将在您的列中显示为713美分。对于某些应用程序,您可能需要更细的粒度(例如,微美元),以最大程度地减少取整问题。

还有其他解决方法。例如,您可以以某种方式将数字值序列化为字符串并将其存储在STRINGBYTES列中。天真地,仅存储"7.13"可以工作,但是当然还有更复杂的表示形式(例如,像"{'dollars': 7, 'cents': 13'}"这样的JSON对象)。

答案 1 :(得分:1)

Cloud Spanner现在支持NUMERIC数据类型,其精度为38个十进制数字,其中小数点后为9。 请参阅文档here