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

v6ylcynt  于 12个月前  发布在  Mysql
关注(0)|答案(2)|浏览(126)

我需要从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的Maven,如果有人能帮助我,我将不胜感激

hi3rlvi2

hi3rlvi21#

你似乎碰到了这个bug:https://bugs.mysql.com/bug.php?id=40320这个bug从2008年就开始报告了。我刚刚测试了一下,发现它仍然是MySQL 8.0.3中的一个bug。
我可以用这种方式解决这个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 OUTFILELOAD DATA INFILE

w6lpcovy

w6lpcovy2#

就用"引用吧
示例打击:

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

字符串
文件看起来像:

a,b
1,"string
aaa"


Pandas可以处理它:

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


DataFrame:

a   b
0   1   string\naaa


当然Spark与multiLine=True

df = spark.read.csv("nl.csv", header=True, multiLine=True)

相关问题