PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

23.1. 区域设置 #

23.1.1. 概述
23.1.2. 区域设置对数据库行为的影响
23.1.3. 选择区域设置
23.1.4. 区域提供者
23.1.5. ICU 区域支持
23.1.6. 区域常见问题排查

区域设置(Locale)是指应用程序尊重特定地理区域和文化群体关于字母表顺序、文本比对排序、数值与货币符号排版等习惯的软件规范。PostgreSQL 深度集成了标准 ISO C 与 POSIX 区域设置规范。

23.1.1. 概述 #

区域设置在通过 initdb 初始化集群时自动确立。默认继承当前操作系统环境变量的区域配置,也可以通过参数显式声明:

initdb --locale=zh_CN.UTF-8

系统允许对不同维度的本地化规则进行灵活组合配置:

LC_COLLATE文本字符串的比对与物理排序次序
LC_CTYPE字符属性分类(哪些属于字母、大小写转换规则)
LC_MESSAGES系统日志与报错信息的输出自然语言
LC_MONETARY货币金额的格式化排版规则
LC_NUMERIC数值常量的千分位与小数点排版规则
LC_TIME日期与时间的星期、月份名称排版规则

需要特别关注的是,非 C 语言环境下的字符串比对需要根据多级字典序进行权重计算,相较于纯字节逐字节比对具备一定的性能开销。若业务对文本排序完全不敏感且极致追求性能,可在建库时选择 C 或 POSIX 区域设置。

23.1.2. 区域设置对数据库行为的影响 #

区域设置主要影响字符排序规则(LC_COLLATE)、大小写转换与字符分类(LC_CTYPE)以及数字和货币格式。

23.1.3. 选择区域设置 #

可以在使用 initdb 初始化集群时指定全局区域,或在创建数据库时单独指定。

23.1.4. 区域提供者 #

PostgreSQL 支持 libc、icu 与 builtin 三种区域提供者。

23.1.5. ICU 区域支持 #

基于 ICU 国际化组件库的高精度跨平台区域实现。

23.1.5.1. ICU 区域名称 #

标准 BCP 47 语言标签格式。

23.1.5.2. ICU 规范化 #

语言标签的规范化重写。

23.1.5.3. BCP 47 语言标签 #

语言、国家及扩展参数标签语法。

23.1.6. 区域常见问题排查 #

操作系统环境缺失对应 locale 或 glibc 大版本升级导致的排序规则改变排查。