【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字符集

相关推荐
AhriProGramming4 小时前
Python学习快速上手文章推荐(持续更新)
开发语言·python·学习·1024程序员节
彩云回5 小时前
LOESS回归
人工智能·机器学习·回归·1024程序员节
xuejianxinokok7 小时前
io_uring 快吗? Postgres 17 与 18 的基准测试
数据库·后端·postgresql
叱咤少帅(少帅)7 小时前
windows10 C 盘瘦身路径
windows·1024程序员节
TT哇7 小时前
【优先级队列(堆)】2.数据流中的第 K ⼤元素(easy)
算法·1024程序员节
傅科摆 _ py8 小时前
Vscode 如何配置远程环境的 ssh 连接
ide·vscode·编辑器·1024程序员节
颜夕啊9 小时前
Windows系统php8.2.9 安装imagick扩展
php·1024程序员节
学编程就要猛9 小时前
数据结构初阶:Java泛型
数据结构·1024程序员节
未来之窗软件服务10 小时前
未来之窗昭和仙君(三十二)通用押金系统——东方仙盟筑基期
1024程序员节·仙盟创梦ide·昭和仙君·东方仙盟架构
Tisfy13 小时前
LeetCode 3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了
leetcode·题解·模拟·1024程序员节