【PG】PostgreSQL字符集

目录

设置字符集

[1 设置集群默认的字符集编码](#1 设置集群默认的字符集编码)

[2 设置数据库的字符集编码](#2 设置数据库的字符集编码)

查看字符集

[1 查看数据字符集编码](#1 查看数据字符集编码)

[2 查看服务端字符集](#2 查看服务端字符集)

[3 查看客户端字符集](#3 查看客户端字符集)

[4 查看默认的排序规则和字符分类](#4 查看默认的排序规则和字符分类)

被支持的字符集


PostgreSQL里面的字符集支持你能够以各种字符集存储文本,包括单字节字符集,比如 ISO 8859 系列,以及多字节字符集 ,比如EUC(扩展 Unix 编码 Extended Unix Code)、UTF-8 和 Mule 内部编码。所有被支持的字符集都可以被客户端透明地使用,但少数只能在服务器上使用(即作为一种服务器方编码)。默认的字符集是在使用 initdb初始化你的PostgreSQL数据库集簇时选择的。在你创建一个数据库时可以重载它,因此你可能会有多个数据库并且每一个使用不同的字符集。

但是,一个重要的限制是每个数据库的字符集必须和数据库的LC_CTYPE (字符分类)和LC_COLLATE (字符串排序顺序)设置兼容。对于 CPOSIX环境,任何字符集都是允许的, 但是对于其他libc提供的环境只有一种字符集可以正确工作(不过, 在Windows上UTF-8编码可以和任何环境配合使用)。 如果您配置了ICU支持,则ICU提供的区域设置可用于大多数服务器端编码, 但不能用于所有服务器端编码。

设置字符集

1 设置集群默认的字符集编码

initdb为一个PostgreSQL集簇定义缺省的字符集(编码)。比如:把缺省字符集设置为EUC_JP(用于日文的扩展Unix 编码)。

initdb -E EUC_JP
或者
initdb --encoding EUC_JP

如果没有给出-E或者--encoding选项,initdb会尝试基于指定的或者默认的区域判断要使用的合适编码。

2 设置数据库的字符集编码

数据库创建时你指定一个非默认编码,提供的编码应和选择的区域兼容:

bash 复制代码
createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean
或者SQL 
CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

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

查看字符集

1 查看数据字符集编码

数据库的字符集存储在系统目录pg_database

bash 复制代码
psql -l
或者
postgres=# \l
                                   List of databases
    Name     |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-------------+----------+----------+-------------+-------------+-----------------------
 db3         | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
 db4         | role1    | UTF8     | en_US.UTF8  | en_US.UTF8  |
 db5         | role2    | UTF8     | en_US.UTF8  | en_US.UTF8  |
 dbtemplate  | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
 dbtemplate1 | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
 dbtemplate2 | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
 korean      | postgres | EUC_KR   | ko_KR.euckr | ko_KR.euckr |
 postgres    | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
 template0   | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  | =c/postgres          +
             |          |          |             |             | postgres=CTc/postgres
 template1   | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  | =c/postgres          +
             |          |          |             |             | postgres=CTc/postgres
 testdb      | postgres | UTF8     | en_US.UTF8  | en_US.UTF8  |
(11 rows)

2 查看服务端字符集

bash 复制代码
# 服务端字符集
postgres=# show server_encoding;
 server_encoding
-----------------
 UTF8
(1 row)

3 查看客户端字符集

bash 复制代码
# 客户端字符集
postgres=# show client_encoding;
 client_encoding
-----------------
 UTF8
(1 row)

postgres=#
postgres=#  \encoding
UTF8

4 查看默认的排序规则和字符分类

bash 复制代码
# 字符分类
postgres=# show lc_ctype;
  lc_ctype
------------
 en_US.UTF8
(1 row)


# 排序规则
postgres=# show lc_collate;
 lc_collate
------------
 en_US.UTF8

被支持的字符集

参考 PostgreSQL字符集

相关推荐
小怪兽ysl13 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
福如意如我心意17 小时前
PostGres命令【常用维护,增删改查】
数据库·postgresql·psql
晴天飛 雪18 小时前
Grafana监控PostgreSQL
数据库·postgresql·grafana
惜.己18 小时前
Jmeter中的断言(二)
测试工具·jmeter·1024程序员节
黎明晓月21 小时前
PostgreSQL提取JSON格式的数据(包含提取list指定索引数据)
postgresql·json·list
西电研梦1 天前
考研倒计时30天丨和西电一起向前!再向前!
人工智能·考研·1024程序员节·西电·西安电子科技大学
惜.己1 天前
Jmeter中的断言(四)
测试工具·jmeter·1024程序员节
PGCCC1 天前
【PGCCC】Postgresql 缓存替换算法
数据库·缓存·postgresql
谦谦均1 天前
深入解析PostgreSQL中的PL/pgSQL语法
数据库·postgresql
·云扬·1 天前
Java IO 与 BIO、NIO、AIO 详解
java·开发语言·笔记·学习·nio·1024程序员节