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';
附录:
查看服务器编码:
代码语言:javascript复制SHOW server_encoding;
查询当前的客户端编码:
代码语言:javascript复制SHOW client_encoding;
修改客户端编码方式:
代码语言:javascript复制SET client_encoding TO 'value';
返回默认编码:
代码语言:javascript复制RESET client_encoding;