我必须将数据从表导出到 CSV 文件中。输出如下所示:
SELECT id,duration,description FROM db.entries WHERE id>=2622;
+------+----------+--------------------------------+
| id | duration | description |
+------+----------+--------------------------------+
| 2622 | 1800 | Test
TEst
Teststring |
| 2623 | 1800 | Normal text entry |
| 2624 | 1800 | Yet
Another
Line Break
Test |
| 2625 | 1800 | Another normal line text |
+------+----------+--------------------------------+
4 rows in set (0.001 sec)
ID 2622 和 ID 2624 在描述中包含新行。插入数据库是由 PHP 应用程序完成的(如果相关的话)。
导出的代码片段是这样的:
mysql -u root -p$PASSWD -e "SELECT id,duration,description
INTO OUTFILE '$FILE' FIELDS TERMINATED BY '|' ENCLOSED BY '\'' LINES TERMINATED BY '\\n' \
FROM db.entries \
WHERE id>=2622;"
如果我输出文件,它看起来像这样:
\2622'|'1800'|'Test
\Est
Teststring'
'2623'|'1800'|'Normal text entry'
\2624'|'1800'|'Yet
\nother
\ine Break
Test'
'2625'|'1800'|'Another normal line text'
所有包含新行的行在开头都有额外的斜杠。这可以被替换,但它也会替换常规字符。如何在没有这些不需要的斜杠的情况下导出 CSV?
使用的系统是:
解决方案是删除回车符,该字符似乎是由Web应用程序写入数据库的:
SELECT id,duration,REPLACE(description,CHAR(13), '') description
INTO OUTFILE '$FILE' FIELDS TERMINATED BY '|' ENCLOSED BY '\'' LINES TERMINATED BY '\\n' \
FROM db.entries \
WHERE id>=2622;