本地化:指有關字元、排序、數字格式、貨幣符號等等的文化偏好
postgresql通過兩個途徑提供本地化支援:
- initdb.exe 或自動從作業系統的環境中擷取本地化資訊,如果擷取失敗,postgressql使用預設的通用的C設定
- initdb.exe當然你可以使用--local=loacl_set來指定本地化規則;
- initdb.exe也允許你指定下面將要提到的具體本地化細節參數進行詳細的細節設定
- lc_collate:定序
- lc_ctype:字元集
- lc_numeric:數字格式
- lc_time:日期時間格式
- lc_monetary:貨幣格式
- lc_messages:訊息語言
本地化設定影響以下方面:
- 根據文本資料排序 order by
- like 尋找
- upper、lower、initcap字元函數
- to_char系列資料轉換函式
- 注意:本地化是有代價的。會影響效能,同時減慢字元資料處理,組織like 使用普通索引
普通、普遍、痛點、賣點的字元集支援問題
任何一個應用程式想要在全球成功,支援不同的本地化的字元集是不可迴避的問題。postgresql支援大量的字元集(編碼),結構上分為三個層次:server、轉換函式、client。
- server端的預設字元集編碼是在使用initdb.exe初始化時確定的 --注意euc_cn就是簡體中文字元集。而gb18030 和 gbk=windows936 是僅僅可以用在用戶端的字元集
- 轉換函式postgresql預製了很多,可以通過create conversion增加自己的轉換函式 --需要注意server 和 client的可用性問題(字元集相容問題)
- client端的設定
- set client_encoding to character_set_name
- set names character_set_name
- psql.exe使用\encoding character_set_name
- 調用libpq的庫的程式:調用用戶端字元集編碼設定函數
- 使用設定檔選項:client_encoding
- 使用os環境變數指定:PGCLENTENCODING