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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM