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,'新