如何使用 COPY() 以另一种编码win1251、SQL_ASCII导入 UTF8 表?

问题描述

史前史:你好,我看到很多关于 postgres 编码的问题,但是。 我有 UFT8 表,我正在使用 copY 函数以 CSV 格式导入该表,我需要使用不同的编码(如 WIN1251 和 sql_ASCII)进行 copY。

问题:当我在表中有WIN1251/sql_ASCII不支持的字符时,我会得到经典错误

character with byte sequence 0xe7 0xb0 0xab in encoding "UTF8" has no equivalent in encoding "WIN1251"

我尝试使用“set client_encoding/convert/convert_to” - 没有成功。

主要问题:有没有什么方法可以使用 sql 做到这一点而不会出错?

解决方法

根本没有办法将笛转换成Windows-1252,所以你可以忘记这一点。

如果您将客户端编码设置为 SQL_ASCII,您将能够将数据加载到 SQL_ASCII 数据库中,但这没什么用,因为数据库无法将其识别为字符,但 127 以上的三个无意义字节。