PostgreSQL字符集问题
轉自:osdba的文章《初學者遇到的PostgreSQL字符集問題的解決》
當初學者在使用PostgreSQL數據庫,輸入中文時,會遇到“ERROR: invalid byte sequence for encoding “UTF8”: 0xd6d0”的錯誤,原因是由于沒有正確設置客戶端字符集。
問題的原因:
默認情況下,PostgreSQL是不轉換字符集的,如果你的數據庫是UTF8的字符集,一般終端的中文字符集會設置為GBK,或en_US(查看終端的字符集可以看LANG環境變量的設置),所以你輸入的中文是GBK的編碼,這個編碼不經轉換的存入數據庫中,而數據庫是UTF8的,PostgreSQL一看沒有這樣的UTF8編碼,所以當然報錯了。
解決方法為:
方法一:設置postgresql的客戶端編碼為GBK,這時PostgreSQL就知道輸入的內容是GBK編碼的,這樣PostgreSQL數據庫會自動做字符集的轉換,把其轉換成UTF8編碼。
方法二:直接設置終端的字符集編碼為UTF8,讓輸入的編碼直接為UTF8,而不是GBK。
看我具體的演示:
方法一:設置postgresql的客戶端編碼:
設置psql客戶端字符集為GBK,方法有兩種,一種是在psql中輸入“\encoding GBK” ,另一種是設置環境變量“export PGCLIENTENCODING=GBK”,看我的演示:
方法二:設置終端的編碼為UTF8:
[postgres@dsc ~]$ export LANG=zh_CN.UTF8
然后修改終端軟件的字符集編碼,我使用的是SecureCRT,修改方法為:
Option->Session Option->外觀->字符編碼,把那個下拉框的內容改成“UTF8”:
然后再插入數據測試:
[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)總結
以上是生活随笔為你收集整理的PostgreSQL字符集问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天玑820和骁龙765g哪个好 与骁龙7
- 下一篇: Postgresql中文排序