" Money"的意外行为; PostgreSQL中的字段

时间:2017-03-14 16:10:51

标签: php postgresql

我开始使用Linux Ubuntu开发一个Web系统,在某些时候我必须使用数据类型" money"

进行以下操作:
explode(" ", "R$ 3,000.00"); // [0] => "R$" and [1] => "3,000.00"

然而,当我在Windows中安装软件时,我意识到数据没有空间保存,即" R $ 3,000.00" 。很快,代码片段无法正常运行。

注意:1可以"修复"这使用:

preg_replace("/[R$]+/", "$0 $1", "R$3,000.00"); // "R$ 3,000.00"

但肯定不是更好的方式。

注2:使用的PostgreSQL版本为9.5

有人会有任何解决此问题的建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是lc_monetary区域设置在两台计算机上的值不同。这就是两个不同操作系统上的“意外行为”。

您可以使用以下内容更改lc_monetary区域设置:

set lc_monetary to 'SOME_LOCALE';

然后用以下方法测试:

test=# SELECT 34.888::money;
 money  
--------
 $34.89
(1 row)

https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-LC-MONETARY

了解详情

如果您的应用程序使用不同的操作系统,最好在连接开始时或在配置中正确设置区域设置。

在Mac / Linux上,您可以看到locale -a的可用语言区域。我不确定Windows。

如果您通常不使用货币符号,则应明确考虑将该号码存储为decimal