MariaDB 中的新行在 csv 导出中产生奇怪的字符

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

我必须将数据从表导出到 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?

使用的系统是:

  • Ubuntu 22.04.3 LTS
  • mariadb-server-10.6
csv mariadb
1个回答
0
投票

解决方案是删除回车符,该字符似乎是由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;
© www.soinside.com 2019 - 2024. All rights reserved.