PostgreSQL數據類型-貨幣類型

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)數據類型。內存

相關文章
相關標籤/搜索