在对该表上的特定行执行SELECT
查询时获取以下异常
ERROR: character with byte sequence 0xc2 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1252"
该行中的column
之一包含日语字符,该字符已使用UTF-8编码并插入其中。
这个问题有什么问题吗?
答案 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 文件中复制数据