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

Raa*_*thi 4 postgresql encoding utf-8 character-encoding

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

ERROR:  character with byte sequence 0xc2 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1252"
Run Code Online (Sandbox Code Playgroud)

之一的column该行中包含已编码的UTF-8,并插入到它的日文字符.

这个问题有什么问题吗?

Ada*_*dam 11

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

SHOW server_encoding;
Run Code Online (Sandbox Code Playgroud)

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

SET client_encoding TO 'UTF8';
Run Code Online (Sandbox Code Playgroud)

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

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

要解决您的问题:

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

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

查看支持的字符集文档.


Jak*_*ke 9

这里

我遇到了这个错误“错误:编码“UTF8”中的字节序列<...>的字符在编码“WIN1252”中没有等价物;” 同时使用 MySQL Workbench 将数据从 PostgreSQL 迁移到 MySQL。我不确定为什么会发生这种情况,因为目标 MySQL 数据库具有 UTF8 编码,我认为一切都可以映射到它。

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


Fur*_*oud 6

对我来说,我从 csv 文件导入数据,我需要连接到数据库,然后将客户端编码从 更改WIN1252UTF8,然后从 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 文件复制数据