20 December 2012

PostgreSQL Server端数据存储中文一般使用编码为UTF-8,因此,客户端如果是UTF-8编码,则不会出现乱码问题。绝大多数PostgreSQL的客户端库(例如jdbc、基于libpq的库)会比较智能的感知客户端的编码,然后将数据进行正确的转换后发送给客户端。

而Npgsql这个接口比较特殊,不能正确的自动设置客户端编码,在连接选项中也不能设置encoding,所以会导致中文乱码产生。这时候可以通过下面的方法进行操作:

在PostgreSQL中,设置此用户名对此DB的连接选项的client_encoding强制为GBK编码

alter role in database set client_encoding to 'GBK';


这个设置只在指定的用户连接指定的DB时生效,如果想让它对所有用户所有DB生效,可以在postgresql.conf中修改client_encoding这个配置。

参考连接

pgsql中设置参数的方法:http://www.postgresql.org/docs/9.2/static/config-setting.html#CONFIG-SETTING-OTHER-METHODS

alter role:http://www.postgresql.org/docs/9.2/static/sql-alterrole.html