从文件复制:在 Windows 上使用 UTF8 读取 psql 消息

问题描述 投票:0回答:2

我正在尝试使用 COPY 命令将 csv 文件导入到 postgres。 由于我收到了众所周知的“错误:编码“UTF8”中字节序列为 0xd0 0x9f 的字符在编码“WIN1252”中没有等效项”,因此我将 client_encoding 更改为 utf8。 现在我收到完全无法阅读的消息 ПОМÐÐâКÐ: Ð²Ñ–Ð´Ð½ÐˆÐµÐ½Ð½Ñ "mytab" не Ñ–ÑнÑςÑ”

我尝试通过 chcp 65001 更改控制台代码页,但没有成功。 任何人都可以帮助我完成这项极其罕见且复杂的任务 - 将 csv 导入数据库吗?

windows postgresql import console psql
2个回答
1
投票

解决方案

我建议,问题是由于UA或RU安装的数据库本地化造成的。

切换数据库语言应该有帮助(至少帮助了我):

SET lc_messages TO 'en_US.UTF-8';

请在您的电脑上尝试,如果有帮助请告诉我。


我的调查

在 powerShell 中,我总是遇到错误,但是:

ERROR:  character with byte sequence 0xd0 0x9f in encoding "UTF8" has no equivalent in encoding "WIN1252"

当我使用命令将编码切换为 UTF-8 时:

SET client_encoding TO 'UTF8';

我开始得到相同的不可读的符号,但是如果我转到 pgAdmin4 并运行相同的命令,它会在 UA lang 中给出很好解释的错误:

ERROR: ПОМИЛКА:  insert або update в таблиці "exam_results" порушує обмеження зовнішнього ключа "exam_results_subject_id_fkey"
DETAIL:  Ключ (subject_id)=(0) не присутній в таблиці "subjects".
CONTEXT:  SQL-оператор "insert into exam_results (student_id, subject_id, mark) 
        values ((random()*100000)::int,
                (random()*1000)::int,
                (random()*5)::int)"
Функція PL/pgSQL inline_code_block рядок 4 в SQL-оператор

0
投票

我也有类似的情况。为了解决这个问题,我只需在要导入的 SQL 文件顶部添加下一行:

SET client_encoding = 'UTF-8';
© www.soinside.com 2019 - 2024. All rights reserved.