5.3. 单字节字符集记录

你可以通过给 configure 增加 --enable-recode 选项来设置这个特性.这个特性以前被描述成 "西利尔记录支持(Cyrillic recode support)", 不过这个名字没有充分体现它的能力. 它可以用于记录任何单字节字符集.

这个方法使用位于数据库目录(PGDATA)的文件 charset.conf. 它是一个典型的文本配置文件,用空白和新行分隔项和记录,而 # 声明注释. 这里可以识别三个关键字,它们以及它们的语法如下:

BaseCharset      server_charset
RecodeTable      from_charset to_charset file_name
HostCharset      host_spec    host_charset

BaseCharset 定义数据库服务器的编码. 所有字符集的名字只是用于在 charset.conf 内部做影射,因此你可以自由地选择击键友好的名字.

RecodeTable 记录特定的服务器和客户端之间的转换表. 该文件名是与 PGDATA 目录的相对路径. 表文件的格式非常简单.文件里没有关键字,而且字符用一行里的 一对十进制或十六进制(前缀 0x)数值表示:

char_value   translated_char_value

HostCharset 记录用IP地址定义客户端字符集. 你可以在这里放一个 IP 地址,一个给定 IP 地址的掩码范围,或者一个IP区间 (比如,127.0.0.1,192.168.1.100/24,192.168.1.20-192.168.1.40).

charset.conf 文件的处理总是一直到文件结尾,因此你 可以很容易地声明与前面规则不同的特例.在 src/data 里面你可以 找到 charset.conf 的例子和几个记录表.

因为这个解决方法是以客户端的 IP 地址和字符集映射为基础的, 因此它有明显的局限性.你不能在同一个时间里在同一台主机上 使用不同的编码.而且如果你把你的客户端机器启动到更多其他 操作系统也会不方便.但是,如果这些局限不是什么约束,而且你不需要 多字节字符的话,那么它就是一种简单而且有效的解决方法.