ERROR:invalid byte sequence for encoding"UTF8"

 原因是没有正确设置客户端字符集。


 默认情况下,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”,演示如下:

#psql -d dsc

dsc=# insert into t values(1,'中国');

ERROR:  invalid byte sequence for encoding "UTF8": 0xd6d0

HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

dsc=# show client_encoding;

show client_encoding;

 client_encoding

-----------------

 UTF8

(1 row)

dsc=# \encoding GBK 

\encoding GBK 


dsc=# show client_encoding;

 client_encoding

-----------------

 GBK

(1 row)

dsc=# insert into t values(1,'中国');

INSERT 0 1

dsc=# commit;

WARNING:  there is no transaction in progress

COMMIT

dsc=# select * from t;

 id | name

----+------

  1 | 中国

(1 row)


[postgres@dsc ~]$ export PGCLIENTENCODING=GBK

[postgres@dsc ~]$ psql

psql: FATAL:  conversion between GBK and LATIN1 is not supported

[postgres@dsc ~]$ psql -d dsc

psql (8.4.3)

Type "help" for help.

dsc=# select * from t;

 id | name

----+------

  1 | 中国

(1 row)

dsc=# insert into t values(2,'我的中国');

INSERT 0 1

dsc=# select * from t;                  

 id |   name  

----+----------

  1 | 中国

  2 | 我的中国

(2 rows)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值