本地化:指有关字符、排序、数字格式、货币符号等等的文化偏好
postgresql通过两个途径提供本地化支持:
- 1。通过所使用的os获取本地化偏好
- initdb.exe 或自动从操作系统的环境中获取本地化信息,如果获取失败,postgressql使用默认的通用的C设置
- initdb.exe当然你可以使用--local=loacl_set来指定本地化规则;
- initdb.exe也允许你指定下面将要提到的具体本地化细节参数进行详细的细节设置
- 2。提供几个本地化设置参数定制每个细节方面
- 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