在安裝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字符集