PostgreSQL:编码“UTF8”中字节序列为0xc2 0x81的字符在编码“WIN1252”时没有等价物

时间:2016-07-20 12:50:14

标签: postgresql encoding utf-8 character-encoding

在对该表上的特定行执行SELECT查询时获取以下异常

ERROR:  character with byte sequence 0xc2 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1252"

该行中的column之一包含日语字符,该字符已使用UTF-8编码并插入其中。

这个问题有什么问题吗?

5 个答案:

答案 0 :(得分:6)

您应该知道数据库中使用了什么编码。

SHOW server_encoding;

当您连接到数据库时,您可以指定客户端应使用的编码:

SET client_encoding TO 'UTF8';

如果服务器和客户端编码不同,则数据库驱动程序会尝试在这两种编码之间进行转换。当它找不到等效字符时,抛出错误。

因此,服务器编码和客户端编码应该相同,以避免像您这样的问题。

解决问题:

  • 连接到您的数据库
  • client_encoding设置为UTF8
  • 使用日文字符更新行

为避免将来出现此问题,请记住在连接数据库时将client_encoding设置为正确的值。

查看Supported Character Sets上的文档。

答案 1 :(得分:2)

请参阅here

我遇到了这个错误"错误:字符序列< ...>的字符在编码" UTF8"没有相应的编码" WIN1252";"使用MySQL Workbench将数据从PostgreSQL迁移到MySQL。我不确定为什么会这样,因为目标MySQL数据库有UTF8编码,我认为一切都可以映射到它。

这个问题的真正根本原因是我用来连接源数据库的PostgreSQL驱动程序,并在Workbench中指定了PostgreSQL ODBC驱动程序(ANSI),之后我将其更改为PostgreSQL ODBC驱动程序(UNICODE)一切正常。

答案 2 :(得分:0)

当Crystal Reports在字段中看到这组字符时,我得到了错误: [18/03/2019 2:20 PM]

最后,我只是更改了该字段的内容,但是除非我能找到一个为UTF8设计的不错的PostgreSQL ODBC驱动程序,否则我可能每隔几周就会看到此问题,并且需要进行数据清理。 / p>

答案 3 :(得分:0)

水晶报告中发生了我的事...

我更改了发生错误的视图列的内容...

我发现字符“ 0xc2 0x81”等于“ chr(128)”-http://lwp.interglacial.com/appf_01.htm-因此,我已替换了该字符,如下所示:(replace((mi.complemento):: text,chr (128),'C':: text)):: character variant(400)AS补充

欢呼!

答案 4 :(得分:0)

对我来说,我从 csv 文件导入数据,我需要连接到数据库,然后将客户端编码从 WIN1252 更改为 UTF8,然后从 csv 文件导入数据:

  • psql -h localhost -p 5432 -d timetrex -U postgres; // 连接数据库
  • set client_encoding to UTF8;
  • show client_encoding; // 此命令将显示当前编码
  • 当您仍在数据库中时,您需要以这种方式导入文件:COPY users FROM 'D:/Downloads/users_dump.csv' (format CSV , header true, DELIMITER ',' ,ENCODING 'UTF8') ; // 从 csv 文件中复制数据