编码'WIN1252'中字节序列为0x9d的字符在编码'UTF8'时没有等效字符

Sah*_*shi 19 postgresql encoding utf-8

我在我的sql脚本中读取csv文件并将其数据复制到postgre sql表中.代码行如下:

\copy participants_2013 from 'C:/Users/Acrotrend/Desktop/mip_sahil/mip/reelportdata/Participating_Individual_Extract_Report_MIPJunior_2013_160414135957.Csv' with CSV delimiter ',' quote '"' HEADER;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:编码'WIN1252'中字节序列为0x9d的字符在编码'UTF8'时没有等效字符.

任何人都可以帮我解决这个问题的原因,我该如何解决?

Phi*_*ing 39

问题是0x9D在WIN1252中不是有效的字节值.这里有一张表:https://en.wikipedia.org/wiki/Windows-1252

问题可能是您正在导入UTF-8文件而postgresql默认为Windows-1252(我认为这是许多Windows系统上的默认设置).

在使用chcp运行脚本之前,需要更改Windows命令行上的字符集.或者在postgresql中你可以:

SET CLIENT_ENCODING TO 'utf8';
Run Code Online (Sandbox Code Playgroud)

在导入文件之前.


isa*_*pir 6

只需在命令中指定encoding 'UTF-8'为编码\copy,例如(为了便于阅读,我将其分成两行,但将其全部放在同一行):

\copy dest_table from 'C:/src-data.csv' 
                 (format csv, header true, delimiter ',', encoding 'UTF8');
Run Code Online (Sandbox Code Playgroud)

更多细节:

问题是客户端编码设置为WIN1252,很可能是因为它在 Windows 计算机上运行,​​但文件UTF-8中包含字符。

您可以使用以下命令检查客户端编码

SHOW client_encoding;

 client_encoding
-----------------
WIN1252
Run Code Online (Sandbox Code Playgroud)