为了添加 PostgreSQL
对中文的支持,执行以下操作:
./configure --enable-nls=zh_CN make make install
同时修改 postgresql.conf
配置文件,将 lc_messages
参数修改为 zh_CN
即可。
在我的环境下,psql
连到数据库,执行 SQL 语句后的回复信息显示正常,为中文;但在另一个环境下,却是显示一堆问号乱码 ??: 42601: ???? ? "sdf" ????
。
真是莫名其妙,然后我的问题排除步骤如下所示:
- 检查终端仿真软件(putty,xshell等)的编码设置
- 检查
client_encoding
和server_encoding
设置
不过都不对症,检查了一下问题环境的起始配置,发现 lc_messages = 'C'
:
起始的英文注释 These settings are initialized by initdb, but they can be changed.
引起了我的注意,是不是跟 initdb
有关呢,因为问题环境是已经搭建好的,作为新手也没考虑到这里。于是去官网查了一下,发现 Locale Support 这里给出了答案。
果然和 initdb
有关,原来问题环境在 initdb
时使用了 --no-locale
参数,导致 LC_COLLATE
和 LC_CTYPE
均被设置为特殊的区域名 C
。而我的环境在 initdb
时没有设定与 locale 相关的参数,所以继承了系统的 LANG
环境变量 en_US.UTF-8
,将 lc_messages
参数修改为 zh_CN
后就支持了中文。问题环境修改后出现乱码,猜测是 C
类型不支持中文编码,因此显示了乱码。
现在看来,只有重新 initdb
了。
参考链接: