我需要将一些数据从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的专家,如果有人可以帮助我,我将不胜感激
您似乎正在遇到以下错误:https : //bugs.mysql.com/bug.php?id=40320自2008年以来就报告了该错误。我刚刚进行了测试,发现它仍然是MySQL 8.0.3中的错误。
我可以通过以下方式解决该错误:
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文本(即两个字符)导出。因此,在加载数据时,必须撤消替换:
\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。
SELECT...INTO OUTFILE
LOAD DATA INFILE