PostgreSQL字符集问题
轉(zhuǎn)自:osdba的文章《初學者遇到的PostgreSQL字符集問題的解決》
當初學者在使用PostgreSQL數(shù)據(jù)庫,輸入中文時,會遇到“ERROR: invalid byte sequence for encoding “UTF8”: 0xd6d0”的錯誤,原因是由于沒有正確設(shè)置客戶端字符集。
問題的原因:
默認情況下,PostgreSQL是不轉(zhuǎn)換字符集的,如果你的數(shù)據(jù)庫是UTF8的字符集,一般終端的中文字符集會設(shè)置為GBK,或en_US(查看終端的字符集可以看LANG環(huán)境變量的設(shè)置),所以你輸入的中文是GBK的編碼,這個編碼不經(jīng)轉(zhuǎn)換的存入數(shù)據(jù)庫中,而數(shù)據(jù)庫是UTF8的,PostgreSQL一看沒有這樣的UTF8編碼,所以當然報錯了。
解決方法為:
方法一:設(shè)置postgresql的客戶端編碼為GBK,這時PostgreSQL就知道輸入的內(nèi)容是GBK編碼的,這樣PostgreSQL數(shù)據(jù)庫會自動做字符集的轉(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->外觀->字符編碼,把那個下拉框的內(nèi)容改成“UTF8”:
然后再插入數(shù)據(jù)測試:
[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字符集问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天玑820和骁龙765g哪个好 与骁龙7
- 下一篇: Postgresql中文排序