Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页
编辑页面

22021 字符不在编目中

错误: 编码的字节序列无效

客户端向服务端发送或接收文本数据时,可能发生如下错误:

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

可能的原因:

  • 客户端系统环境编码与数据库客户端的编码配置不匹配(例如,客户端系统环境的cp936和数据库客户端的UTF8)。
  • 执行的SQL脚本文件的编码,与数据库客户端的编码配置不匹配。
  • 文本流包含字符串中不允许的二进制数据(如 NUL 字节)。

解决方案:

在Linux上面,您可以使用locale查看客户端系统环境的编码:

$ locale -k charmap
charmap="UTF-8"

在Linux上面,您可以使用file查看SQL脚本文件的编码:

$ file --mime test.sql
test.sql: text/plain; charset=utf-8

在Windows上面,您可以使用chcp查看客户端系统环境的编码:

> chcp
活动代码页: 936

上面显示的代码页936,它是GBK编码的别名。

您可以按如下方式查看数据库客户端编码:

postgres=# SHOW client_encoding;
 client_encoding
-----------------
 GBK
(1 row)

这样会将文本数据从客户端编码转换为数据库服务端编码。

您可以按如下方式查看数据库服务端编码:

postgres=# SHOW server_encoding;
 server_encoding
-----------------
 UTF8
(1 row)

如果数据库客户端的编码配置和客户端系统环境的编码不匹配,可以按如下所示修改数据库客户端编码:

SET client_encoding = 'UTF8'

如果SQL脚本文件的编码和数据库客户端的编码配置不匹配,可以按如下所示修改SQL脚本文件的编码:

$ iconv --from-code=GBK --to-code=UTF-8 test-gbk.sql > test-utf8.sql