PostgreSQL支持貨幣(money)類型,在內存中佔用8 位空間,表示範圍-92233720368547758.08 to +92233720368547758.07,有別於變精度浮點類型real 和 double precision,和numeric有些類似,均可以保證精度,區別在於貨幣類型會截取小數點後數據,有輸出格式,輸出格式受到lc_monetary設置影響。數據庫
#查看Linux系統lc_monetary postgres=# show lc_monetary; lc_monetary ------------- zh_CN.UTF-8 (1 行記錄) #查看Windows系統lc_monetary,數據庫版本10.0 test=# show lc_monetary; lc_monetary ----------------------------------------------------- Chinese (Simplified)_People's Republic of China.936 (1 行記錄) test=# ---執行一個簡單查詢,提示:數據被截取顯示 postgres=# select '111.333333'::money; money ---------- ¥111.33 (1 行記錄)
查看lc_monetary可支持設置類型。切換lc_monetary值不一樣查看結果。PostgreSQL默認值爲C,支持本地化。post
minmin@debian:~$ locale -a C C.UTF-8 POSIX zh_CN.utf8 minmin@debian:~$ ---切換至默認值 postgres=# set lc_monetary='C'; SET postgres=# postgres=# postgres=# set lc_monetary='POSIX'; SET postgres=# postgres=# select '100.777'::money; money --------- $100.78 (1 行記錄) postgres=#
切換至POSIX之後,貨幣顯示格式發生變化。code
postgres=# set lc_monetary='C'; SET postgres=# select '100.777'::money; money --------- $100.78 (1 行記錄) postgres=# set lc_monetary='zh_CN.utf8'; SET postgres=# select '100.777'::money; money ---------- ¥100.78 (1 行記錄) postgres=#
注意:money不包含幣種信息,嚴格來說不算貨幣數據類型,實際使用過程當中還存在諸多不便,所以有人推薦使用decimal(numeric)數據類型。內存