一文读懂PostgreSQL编码方式

PostgreSQL 中的字符集支持允许以各种字符集(也称为编码)存储文本,包括单字节字符集,如 ISO 8859系列和多字节字符集,如 EUC (EUC)、 UTF-8和 Mule 内部代码。所有支持的字符集都可以由客户机透明地使用,但是有一些字符集不支持在服务器中使用(即作为服务器端编码)。使用 initdb 初始化 PostgreSQL 数据库集群时选择了默认字符集。在创建数据库时可以重写它,因此可以使用多个数据库,每个数据库具有不同的字符集。

在 Windows 上,UTF-8编码可以用于任何语言环境。所以,windows PostgreSQL 服务器端(server)的默认编码方式为UTF8,在使用中文的windows系统上,操作系统的语言是GBK,所以,windows PostgreSQL 客户端(client)的默认编码方式是GBK。PostgreSQL 支持服务器和客户机之间的自动字符集转换:在此环境下插入汉字,一切正常。此时传到客户端的汉字为GBK编码,自动转为UTF8编码存到服务端;而查询时,又自动将服务端的UTF8编码转为GBK来显示,所以没有出现乱码。

当服务端编码为UTF8,客户端工具编码为GBK,查询结果出现中文乱码,可能的原因是:服务器端存储的文本不是由客户端插入的(服务器端插入的?),解决方法就是将客户端工具编码方式修改为UTF8

--方法1:
SET client_encoding TO 'UTF8';
--方法2:
\encoding 'UTF8';

附录:

查看服务器编码

SHOW server_encoding;

查询当前的客户端编码:

SHOW client_encoding;

修改客户端编码方式:

SET client_encoding TO 'value';

返回默认编码:

RESET client_encoding;