将MySQL数据导出到CSV文件时如何保留换行符?

问题描述 投票:0回答:2

我需要将一些数据从mysql导出到csv文件。但其中一列有换行符,我需要将数据导出到保存换行符的 csv 文件。

此时我正在使用以下sql查询:

select username, description from users into outfile '/tmp/test.csv' FIELDS ESCAPED BY '"' TERMINATED BY ','  OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

但是该 sql 查询不会在 csv 文件中保存断行。我不是 MySQL 专家,如果有人可以帮助我,我将不胜感激

mysql sql csv export-to-csv
2个回答
8
投票

您似乎遇到了这个错误:https://bugs.mysql.com/bug.php?id=40320 这个bug从2008年就被报告了。我刚刚测试了一下,发现它仍然是MySQL 8.0.3中的一个bug。

我可以通过这种方式解决这个错误:

SELECT username, REPLACE(description, '\n', '\\n') FROM users
INTO OUTFILE '/tmp/test.csv' FIELDS ESCAPED BY '"' TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

文件以文字

\n
文本(即两个字符)导出。所以数据加载的时候,替换必须反过来:

LOAD DATA INFILE '/tmp/test.csv' INTO TABLE users 
FIELDS ESCAPED BY '"' TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' 
SET description = REPLACE(description, '\\n', '\n');

当然,这不是很优雅,但这是一种解决方法。

另一种选择是编写一个应用程序来进行导出和导入,并避免使用

SELECT...INTO OUTFILE
LOAD DATA INFILE


0
投票

只需使用

"
引用它

打击示例:

with open("nl.csv", "w") as f:
    f.write('a,b\n1,"string\naaa"\n')

文件看起来像:

a,b
1,"string
aaa"

熊猫可以应付:

import pandas as pd
pd.read_csv("nl.csv")

数据框:

    a   b
0   1   string\naaa

当然会火花

multiLine=True

df = spark.read.csv("nl.csv", header=True, multiLine=True)
© www.soinside.com 2019 - 2024. All rights reserved.