调整PostgreSQL货币类型显示格式的教程!

发表时间: 2018-02-07 10:58

在PostgreSql中货币类型是使用money

money类型存储固定小数精度的货币数字,参阅表 8-3。小数的精度由数据库的lc_monetary设置决定。表中展示的范围假设有两个小数位。可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式,如',000.00'。 输出通常是最后一种形式,但和区域相关。

表 8-3. 货币类型

名字存储尺寸描述范围
money8 bytes货币额-92233720368547758.08到+92233720368547758.07

在使用过程中,其显示的方式由lc_monetary决定

lc_monetary='en_US.UTF-8'

lc_monetary='zh_CN.UTF-8'

lc_monetary的值决字的显示的方式,我们只需要在查询前指定区域名称编码即可按我们要求的格式显示,但是当我们重新启动一个新的查询后,再次执行查询分发现货币显示格工并没有被记忆保存下来,那么原因在什么地方呢?

lc_monetary (string)
设置用于格式化货币量的区域,例如用to_char函数族。可接受的值是系统相关的;如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承.

所以,lc_monetary的值一定是系统配置相关的,

比如,要把区域设置为加拿大法语,但使用 U.S. 规则格式化货币,可以使用initdb --locale=fr_CA --lc-monetary=en_US

一些区域分类的值必需在数据库被创建时的就被固定。你可以为不同的数据库使用不同的设置,但是一旦一个数据库被创建,你就不能在数据库上修改这些区域分类的值。LC_COLLATE和LC_CTYPE就是这样的分类。它们影响索引的排序顺序,因此它们必需保持固定, 否则在文本列上的索引将会崩溃(但是你可以使用排序规则放松这种限制,讨论见第 23.2 节)。这些分类的默认值在initdb运行时被确定,并且这些值在新数据库被创建时使用,除非在CREATE DATABASE命令中特别指定。

其它区域分类可以在任何时候被更改,更改的方式是设置与区域分类同名的服务器配置参数(详见第 19.11.2 节)。被initdb选中的值实际上只是被写入到配置文件postgresql.conf中作为服务器启动时的默认值。如果你将这些赋值从postgresql.conf中除去,那么服务器将会从其执行环境中继承该设置。

请注意服务器的区域行为是由它看到的环境变量决定的,而不是由任何客户端的环境变量影响的。 因此,我们要在启动服务器之前认真地设置好这些变量。这样带来的一种后果是如果客户端和服务器设置成不同的区域, 那么消息可能以不同的语言呈现,实际情况取决于它们的起源地。

所以我们只需理改postgresql.conf中相关的值即可完成货币显示格式默认的设置,如下图所示:

修改postgresql.conf中的lc_monetary值