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

发布于 2025-01-09 07:45:28 字数 234 浏览 0 评论 0原文

我正在尝试使用 COPY 命令将 csv 文件导入到 postgres。 由于我收到了众所周知的“错误:编码“UTF8”中字节序列为 0xd0 0x9f 的字符在编码“WIN1252”中没有等效项”,因此我将 client_encoding 更改为 utf8。 现在我收到完全无法阅读的消息 我尝试通过 chcp 65001 更改控制台代码页,

但没有成功。 任何人都可以帮助我完成这个非常罕见且复杂的任务 - 将 csv 导入数据库吗?

I'm trying to import csv file to postgres with COPY command.
As I've received well known 'ERROR: character with byte sequence 0xd0 0x9f in encoding "UTF8" has no equivalent in encoding "WIN1252"' I changed my client_encoding to utf8.
Now I'm getting completely unreadable message
ПОМИЛКÐ: Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ "mytab" не Ñ–Ñнує

I tried to change console codepage by chcp 65001 but with no luck.
Can anybody help me with that extraordinary rare and complex task - to import csv to database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别低头,皇冠会掉 2025-01-16 07:45:28

解决方案

我建议,问题是由于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-оператор

Solution:

I would suggest, that problem is due to UA or RU localization of installed DB.

Switching DB lang should help (at least hepled me):

SET lc_messages TO 'en_US.UTF-8';

Please try on your PC and let me know if that helps.


My investigation:

In the powerShell I all the time getting an error but with:

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

When I swith encoding to UTF-8 with comand:

SET client_encoding TO 'UTF8';

I'm starting to get the same not readable symbols, but if I going to pgAdmin4 and run the same command it gives me well explained error in 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-оператор
冷月断魂刀 2025-01-16 07:45:28

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

SET client_encoding = 'UTF-8';

I had a similar situation. To fix it, I just add at the top of the SQL file to be imported, the next line:

SET client_encoding = 'UTF-8';
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文