PostgreSQL initdb报错:先是:initdb: invalid locale name "zh_CN.UTF-8" 然后是: initdb: invalid locale settings; check LANG and LC_* environment variables

在安装PostgreSQL时, initdb报错:

先是:initdb: invalid locale name "zh_CN.UTF-8" 

然后是: initdb: invalid locale settings; check LANG and LC_* environment variables

 

背景:

服务器系统为CentOS8,目前客户环境中只有en_US.UTF-8字符集。

 

问题记录:

一、报错:initdb: invalid locale name "zh_CN.UTF-8" 

1)原因是在initdb时指定了编码为字符集为zn_CN.UTF-8,而系统没有这个编码导致的。

2)修改为:

initdb xxxx -E UTF-8 

不指定具体的编码集,默认就使用了本地的en_US.UTF-8编码,初始化成功。

 

二、报错:initdb: invalid locale settings; check LANG and LC_* environment variables

但是客户要求用zh_CN.UTF-8编码,就需要重新初始化:

1)修改系统编码:

vim /etc/locale.conf 

LANG=zh_CN.utf8 

source /etc/locale.conf 

 

2)查看系统编码:

env

LANG改过来了

 

3)再次初始化,此时报错:

initdb: invalid locale settings; check LANG and LC_* environment variables

 

4)查看系统是包含zh_CN.UTF-8字符集:

locale -a|grep zh

--发现没有

 

locale 

除了LANG是zh_CN.UTF-8,其他都是en_US.UTF-8

 

5)安装中文字符集

yum install glibc-common 

yum install -y langpacks-zh_CN 

 

source /etc/locale.conf 

locale -a|grep zh

--有中文字符集了

 

6)查看字符集

locale

都是中文的了

 

7)重新初始数据库目录,成功,数据库编码为zh_CN.UTF-8

 

三、en_US.UTF-8 和 zh_CN.UTF-8 字符集区别:

en_US.UTF-8 和 zh_CN.UTF-8 包含的字符数量是基本上一样的,大概是七万个汉字,编码都是 UTF-8 编码,字符集是 Unicode,版本是 4.1 吧?zh_CN.GB18030 和 zh_CN.GBK 的字符集都与 Unicode 3 是等价的,记得应该是这样
语言环境的差别就是另一回事了,中国人和外国人表示时间啦,数字啦,习惯都不一样,所以必须区分开。大部分程序根据语言环境变量来选择界面的语言是中文还是英文。

 

所以一般linux系统的语言环境设置成:export LANG=zh_CN.UTF-8,代表中国人使用的unicode字符集

 

PostgreSQL initdb报错:先是:initdb: invalid locale name "zh_CN.UTF-8" 然后是: initdb: invalid locale settings; check LANG and LC_* environment variables

上一篇:rds mysql 修改百万级大表的表结构


下一篇:MySQL ------ 字符集(character set) 和 校对(collate)(三十)