我正在尝试使用 COPY 命令将 csv 文件导入到 postgres。 由于我收到了众所周知的“错误:编码“UTF8”中字节序列为 0xd0 0x9f 的字符在编码“WIN1252”中没有等效项”,因此我将 client_encoding 更改为 utf8。 现在我收到完全无法阅读的消息 ПОМÐÐâКÐ: Ð²Ñ–Ð´Ð½ÐˆÐµÐ½Ð½Ñ "mytab" не Ñ–ÑнÑςÑ”
我尝试通过 chcp 65001 更改控制台代码页,但没有成功。 任何人都可以帮助我完成这项极其罕见且复杂的任务 - 将 csv 导入数据库吗?
解决方案:
我建议,问题是由于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-оператор
我也有类似的情况。为了解决这个问题,我只需在要导入的 SQL 文件顶部添加下一行:
SET client_encoding = 'UTF-8';