postgresql 字符集查看及修改

一、 查看字符集

pg 10中支持的字符集,及服务段和客户端之间的自动字符集转换规则参考 http://www.postgres.cn/docs/10/multibyte.html

1. 服务器实例字符集

postgres=# show server_encoding;
 server_encoding 
-----------------
 UTF8

2. 数据库字符集

postgres=# \l
-- 或者
postgres=# select datname,pg_encoding_to_char(encoding) as encoding from pg_database;

3. 客户端字符集

postgres=# show client_encoding;
 client_encoding 
-----------------
 UTF8

-- 或者

postgres=# \encoding
UTF8

二、 设置字符集

1. 服务器实例字符集

仅在实例初始化时可以设置

initdb -D /data_dir -E UTF8 --locale=en_US.utf8
  • -E encoding 或 --encoding=encoding
    选择模板数据库的编码方式,这将是以后创建的数据库时的默认编码方式,除非在创建数据库时显示覆盖。这个值默认是从区域设置(--locale)中获得的,如果未进行区域设置,默认是SQL_ASCII。
  • --locale=locale
    设置服务器实例区域,默认来自initdb运行的操作系统环境

初始化后修改会报错

postgres=# alter system set server_encoding = 'UTF8';
ERROR:  parameter "server_encoding" cannot be changed

如果在实例初始化时设错了字符集又无法重新初始化,一个workaround是drop template1库,指定编码重建

UPDATE pg_database SET datistemplate=FALSE WHERE datname='template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH owner=postgres template=template0 encoding='UTF8';
UPDATE pg_database SET datistemplate=TRUE WHERE datname='template1';

2. 数据库字符集

  • 使用createdb命令创建时指定
createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean
  • 使用sql创建db时指定

注意以下命令指定拷贝template0数据库。在拷贝任何其他数据库时,不能更改从源数据库得来的编码和区域设置,因为这可能会导致破坏数据。

CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

3. 客户端字符集

  • 操作系统层设置
export PGCLIENTENCODING=GBK
  • 或者db中设置
set client_encoding to 'utf8';
-- 或者
\encoding GBK

参考

postgresql中设置默认编码_welcome to daijiguo's blog-CSDN博客_postgresql 编码设置

http://www.postgres.cn/docs/10/multibyte.html

PostgreSQL字符集问题导致乱码_10931853的技术博客_51CTO博客

  • 40
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值