解决方法:PostgreSQL 输出信息设置为中文后,却显示为乱码

为了添加 PostgreSQL 对中文的支持,执行以下操作:

./configure --enable-nls=zh_CN
make
make install

同时修改 postgresql.conf 配置文件,将 lc_messages 参数修改为 zh_CN即可。

在我的环境下,psql 连到数据库,执行 SQL 语句后的回复信息显示正常,为中文;但在另一个环境下,却是显示一堆问号乱码 ??: 42601: ???? ? "sdf" ????

真是莫名其妙,然后我的问题排除步骤如下所示:

  • 检查终端仿真软件(putty,xshell等)的编码设置
  • 检查 client_encodingserver_encoding 设置

不过都不对症,检查了一下问题环境的起始配置,发现 lc_messages = 'C'

起始的英文注释 These settings are initialized by initdb, but they can be changed. 引起了我的注意,是不是跟 initdb 有关呢,因为问题环境是已经搭建好的,作为新手也没考虑到这里。于是去官网查了一下,发现 Locale Support 这里给出了答案。

果然和 initdb 有关,原来问题环境在 initdb 时使用了 --no-locale 参数,导致 LC_COLLATELC_CTYPE 均被设置为特殊的区域名 C。而我的环境在 initdb 时没有设定与 locale 相关的参数,所以继承了系统的 LANG 环境变量 en_US.UTF-8,将 lc_messages 参数修改为 zh_CN 后就支持了中文。问题环境修改后出现乱码,猜测是 C 类型不支持中文编码,因此显示了乱码。

现在看来,只有重新 initdb 了。

参考链接:

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理