gpt4 book ai didi

mysql - 当值为 '2"%' 时,使用 postgresql 中的副本时出错

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

我需要导入一个不受我控制的包含 300,000 行的表。

我使用以下方法从 mysql 导出数据:

mysqldump -u root --password=secret --fields-enclosed-by='\"' -T/tmp apflora_beob

然后我尝试使用以下示例导入每个表:

\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '\N', ESCAPE E'\"', ENCODING 'UTF8');

这适用于大多数表,也适用于包含 450,000 行的表。但在其中一个我收到此错误:

ERROR:  value too long for type character varying(10)
CONTEXT: COPY beob_evab, line 190310, column COUV_MOUSSES: "2\% \N \N \N \N \N \N \N \N \N \N 30 \N 15 \N \N \N \N \N \N \N \N \N \N \N \N 0.01 \N \N
Bachs, Dau..."

当我检查第 190'310 行中的字段 COUV_MOUSSES 时,它包含以下值:2"%

我需要更改什么才能使其正常工作?

为了根据@klin实现正确的输出"2""%"(谢谢!)我必须添加--fields-escaped-by='"' 到 mysqldump 命令。这样就变成了:

mysqldump -u root --password=secret --fields-enclosed-by='"' --fields-escaped-by='"' -T/tmp apflora_beob

问题是:现在空值导出为 "N.

好吧,没问题,我想并将复制命令更改为:

\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '"N', ESCAPE "'", ENCODING 'UTF8');

这会在 Postgres 中产生以下错误:

ERROR:  CSV quote character must not appear in the NULL specification

并且似乎在 MySQL 中无法更改 Null 值的表示形式。

最佳答案

该值应写为

"2""%"

RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files :

[5]. Each field may or may not be enclosed in double quotes (howeversome programs, such as Microsoft Excel, do not use double quotesat all). If fields are not enclosed with double quotes, thendouble quotes may not appear inside the fields.(...)

[7]. If double-quotes are used to enclose fields, then a double-quoteappearing inside a field must be escaped by preceding it withanother double quote. For example:

   "aaa","b""bb","ccc"

关于mysql - 当值为 '2"%' 时,使用 postgresql 中的副本时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258842/

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