Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xe99d2c
原因是客戶端字符集和插入內容的字符集不匹配。PostgreSQL默認不做字符集轉換,如果數據庫是UTF8的字符集,一般終端的中文字符集會設置爲GBK(可以看LANG環境變量確認),所以這個編碼不經轉換的存入數據庫中,而數據庫是UTF8的,PostgreSQL發現不是UTF8編碼,就報上面的錯。
要想打開自動字符集轉換功能,必須告訴 pg 客戶端使用的字符集。這時可以設置pg客戶端編碼爲GBK,pg就會自動做字符集轉換。
下面是實驗:
1
[root@hostalonetest ~]# psql -h 192.168.18.210 -Upostgres beiigang
psql.bin (9.3.5, server 9.1.14)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
beiigang=#
2
beiigang=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
beiigang | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
3
beiigang=# show server_encoding;
server_encoding
-----------------
UTF8
(1 row)
4
beiigang=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
5
beiigang=# create table tb_tt (id int, ctnr varchar(60));
CREATE TABLE
6
beiigang=# insert into tb_tt(id,ctnr) values(1,'新華網');
ERROR: invalid byte sequence for encoding "UTF8": 0xd0c2
7
beiigang=# \encoding GBK
8
beiigang=# show client_encoding;
client_encoding
-----------------
GBK
(1 row)
9
beiigang=# insert into tb_tt(id,ctnr) values(1,'新華網');
INSERT 0 1
10
beiigang=# select * from tb_tt;
id | ctnr
----+--------
1 | 新華網
(1 row)
11
beiigang=# show client_encoding;
client_encoding
-----------------
GBK
(1 row)
beiigang=#
beiigang=# reset client_encoding;
RESET
beiigang=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
寫代碼時可以根據情況在建立數據庫鏈接時指定客戶端字符集編碼
參考:
http://www.postgresql.org/docs/9.3/interactive/multibyte.html
-----------------
blog.csdn.net/beiigang