【发布时间】:2017-01-20 17:05:31
【问题描述】:
我的项目涉及使用丹麦数字设置的数据库(小数点分隔符是逗号)。我试图弄清楚如何将数据库中的值存储为十进制/数字/除文本之外的任何内容,但让它们保留逗号分隔符。我已将 AWS 参数组中的 lc_numeric 设置更新为 da_DK,我在网上发现它是丹麦语区域设置,但值仍然显示为句点而不是小数点。需要做出哪些改变/这可能吗?
例如:
CREATE TABLE test (
num NUMERIC
); // I've also tried Decimal instead of numeric
INSERT INTO test ('1,3') // error
INSERT INTO test ('1.3') // returns 1.3 when selected.
SHOW lc_numeric // returns da_DK as expected.
SELECT * FROM test; // 1.3
我做错了什么?
注意:这是通过 AWS RDS 的 postgres 实例,任何更改都需要通过参数组菜单进行,而不是通过命令行进行。
【问题讨论】:
-
lc_numeric不会改变 SQL 接受数字作为 input 的方式。您可以更改 函数to_number使用小数分隔符和千位分隔符的方式。我认为没有任何方法可以改变数字的 input 方式(这通常在应用程序的用户界面部分完成,而不是在数据库中完成)。检查stackoverflow.com/questions/8933782/… -
坦率地说,我认为这是一个错误;我们也应该尊重 LC_NUMERIC 的输入,或者根本不支持它。不能往返数字表示是非常可怕的。
-
@CraigRinger 我不这么认为。
to_char和to_number都尊重lc_numeric,而类型输入和输出函数则不尊重。因此,只要您不混音,“往返”就应该没问题,例如to_char(3.14, '99D99')::double precision。 -
@CraigRinger 那么数字文字呢?尊重
lc_numeric的解析器是否应该允许这样做?INSERT INTO test (1,3)(又名。插入单个数字1.3)。显然,这永远不会发生,但允许numeric '1,3'会产生奇怪的差异恕我直言。但是,来自字符串类型的CAST-ing 是另一种情况。它可能尊重lc_numeric。 -
两者都好。
标签: postgresql amazon-web-services locale