Cloud Spanner 是否提供 NUMERIC 类型

Does Cloud Spanner offer a NUMERIC type

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

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

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

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

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

Cloud Spanner 现在支持精度为 38 位小数的 NUMERIC 数据类型,包括小数点后 9 位。 请参考文档 here.