gpt4 book ai didi

Postgresql COPY 编码,如何?

转载 作者:行者123 更新时间:2023-11-29 11:32:48 25 4
gpt4 key购买 nike

我正在导入一个包含 imdb 信息(例如电影名称、电影编号、 Actor 、导演、评级投票等)的 .txt 文件,我使用 COPY 语句导入它。我正在使用 Ubuntu 64 位。问题是,有些 Actor 有不同的名字,比如 Jonas Åkerlund。这就是 postgresql 抛出错误的原因:

ERROR: missing data for column "actors" CONTEXT: COPY movies, line 3060: "tt0283003 Spun 2002 6.8 30801 101 mins. Jonas Ã" ********** Error **********

ERROR: missing data for column "actors" SQL state: 22P04 Context: COPY movies, line 3060: "tt0283003 Spun 2002 6.8 30801 101 mins. Jonas Ã"

我的复制语句是这样的:

COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt' (DELIMITER E'\t', FORMAT CSV, NULL '');

我不太清楚,如何使用排序规则语句。请问你能帮帮我吗?一如既往,谢谢。

最佳答案

排序规则仅决定字符串的排序方式。加载和保存它们时重要的是编码。

默认情况下,Postgres 使用您的client_encoding 设置来执行COPY 命令;如果它与文件的编码不匹配,就会遇到这样的问题。

从消息中可以看出,在尝试读取“Å”时,Postgres 首先读取了一个“Ô,然后遇到了某种错误。 “Å”的 UTF8 字节序列是 C3 85 . C3 恰好是 LATIN1 中的“Ô代码页,而 85 是未定义的*。因此,该文件很可能是 UTF8,但被读取时就好像它是 LATIN1。

它应该像在 COPY 命令中指定适当的编码一样简单:

COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt'
(DELIMITER E'\t', FORMAT CSV, NULL '', ENCODING 'UTF8');

*我相信 Postgres 实际上将 LATIN1 中的这些“空白”映射到相应的 Unicode 代码点。 85 变为 U+0085 ,又名“下一行”,这解释了为什么它被视为 CSV 行终止符。

关于Postgresql COPY 编码,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30916853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com