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

标签 mysql sql csv export-to-csv

我需要将一些数据从 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 这个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 OUTFILELOAD DATA INFILE

关于mysql - 将 MySQL 数据导出到 CSV 文件时如何保留换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499773/

相关文章:

mysql - 如何编写一个可扩展的SQL来查找连续登录n天的用户

php - 如何在分解字符串中按名字 (SQL) 排序

mysql - GROUP BY 已与两个子查询分组的另一个表

r - 在R中,read_csv()解析失败: Converting integers into NA's

mysql - 连接表时一对多连接

mysql - 如何在 1and1 vps 中从 MySQL 5.1.72 升级到 5.5.45

php - 获得正确的 MAX 结果,但没有在 MySQL 中为留言板获得正确的 COUNT 值

sql - 根据条件连接不同的表

matlab - 在 Octave/MATLAB 中读取 csv 文件时可以忽略注释行吗?

python - 迭代日期,计算每 24 小时周期的平均值