我有一个表,其中包含 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..."
当我检查COUV_MOUSSES
第 190'310 行中的字段时,它包含以下值:2"%
.
我必须改变什么才能让它工作?
为了"2""%"
根据@klin(谢谢!)获得正确的输出,我必须添加--fields-escaped-by='"'
到 mysqldump 命令。这样就变成了:
mysqldump -u root --password=secret --fields-enclosed-by='"' --fields-escaped-by='"' -T/tmp apflora_beob
问题是:现在 Null 值导出为"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 值的表示。