PostgreSQL字符集问题
轉(zhuǎn)自:osdba的文章《初學(xué)者遇到的PostgreSQL字符集問題的解決》
當(dāng)初學(xué)者在使用PostgreSQL數(shù)據(jù)庫,輸入中文時(shí),會(huì)遇到“ERROR: invalid byte sequence for encoding “UTF8”: 0xd6d0”的錯(cuò)誤,原因是由于沒有正確設(shè)置客戶端字符集。
問題的原因:
默認(rèn)情況下,PostgreSQL是不轉(zhuǎn)換字符集的,如果你的數(shù)據(jù)庫是UTF8的字符集,一般終端的中文字符集會(huì)設(shè)置為GBK,或en_US(查看終端的字符集可以看LANG環(huán)境變量的設(shè)置),所以你輸入的中文是GBK的編碼,這個(gè)編碼不經(jīng)轉(zhuǎn)換的存入數(shù)據(jù)庫中,而數(shù)據(jù)庫是UTF8的,PostgreSQL一看沒有這樣的UTF8編碼,所以當(dāng)然報(bào)錯(cuò)了。
解決方法為:
方法一:設(shè)置postgresql的客戶端編碼為GBK,這時(shí)PostgreSQL就知道輸入的內(nèi)容是GBK編碼的,這樣PostgreSQL數(shù)據(jù)庫會(huì)自動(dòng)做字符集的轉(zhuǎn)換,把其轉(zhuǎn)換成UTF8編碼。
方法二:直接設(shè)置終端的字符集編碼為UTF8,讓輸入的編碼直接為UTF8,而不是GBK。
看我具體的演示:
方法一:設(shè)置postgresql的客戶端編碼:
設(shè)置psql客戶端字符集為GBK,方法有兩種,一種是在psql中輸入“\encoding GBK” ,另一種是設(shè)置環(huán)境變量“export PGCLIENTENCODING=GBK”,看我的演示:
方法二:設(shè)置終端的編碼為UTF8:
[postgres@dsc ~]$ export LANG=zh_CN.UTF8
然后修改終端軟件的字符集編碼,我使用的是SecureCRT,修改方法為:
Option->Session Option->外觀->字符編碼,把那個(gè)下拉框的內(nèi)容改成“UTF8”:
然后再插入數(shù)據(jù)測(cè)試:
[postgres@dsc ~]$ psql -d dsc psql (8.4.3) Type "help" for help. dsc=# select * from t; id | name ----+---------- 1 | 中國 2 | 我的中國 (2 rows) dsc=# insert into t values(3,'我的中國'); INSERT 0 1 dsc=# select * from t; id | name ----+---------- 1 | 中國 2 | 我的中國 3 | 我的中國 (3 rows)總結(jié)
以上是生活随笔為你收集整理的PostgreSQL字符集问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天玑820和骁龙765g哪个好 与骁龙7
- 下一篇: PostgreSQL免安装部署方法