You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB导出含换行字段的CSV出现异常斜杠,求解决方法

解决MariaDB导出CSV时含换行字段出现多余斜杠的问题

问题背景

在Ubuntu 22.04.3 LTS + MariaDB 10.6环境下,导出db.entries表中id>=2622的数据为CSV时,发现ID为2622、2624的记录因description字段含换行符,导出后记录开头出现多余斜杠(如\2622、\Est),直接替换斜杠会误改正常字符。

问题原因

默认情况下,MariaDB的INTO OUTFILE会用反斜杠转义特殊字符(包括换行、字段包裹符等),而原命令未显式禁用转义,导致含换行的字段被额外转义,出现多余斜杠。

解决方案

方案1:修改INTO OUTFILE命令,禁用转义

在导出命令中添加ESCAPED BY ''(空字符串),直接禁用转义功能。因为已经用ENCLOSED BY '\''将字段用单引号包裹,CSV读取器会正确识别被引号括住的字段内的换行符,无需额外转义。

修改后的完整命令:

mysql -u root -p$PASSWD -e "SELECT id,duration,description
        INTO OUTFILE '$FILE' 
        FIELDS TERMINATED BY '|' 
        ENCLOSED BY '\'' 
        ESCAPED BY '' 
        LINES TERMINATED BY '\n' 
        FROM db.entries 
        WHERE id>=2622;"

方案2:用CHAR(10)明确指定行结束符(可选)

如果方案1中换行符解析有问题,可以用CHAR(10)(ASCII换行符)替代'\n',避免shell转义干扰:

mysql -u root -p$PASSWD -e "SELECT id,duration,description
        INTO OUTFILE '$FILE' 
        FIELDS TERMINATED BY '|' 
        ENCLOSED BY '\'' 
        ESCAPED BY '' 
        LINES TERMINATED BY CHAR(10) 
        FROM db.entries 
        WHERE id>=2622;"

方案3:使用mysqldump导出(更稳定)

如果INTO OUTFILE权限受限或仍有问题,可改用mysqldump:

# 导出数据到临时文件
mysqldump -u root -p$PASSWD --no-create-info --tab=$(dirname $FILE) \
  --fields-terminated-by='|' --fields-enclosed-by="'" --fields-escaped-by='' \
  --lines-terminated-by='\n' db entries --where="id>=2622"

# 重命名为目标文件
mv $(dirname $FILE)/entries.txt $FILE

注意事项

  • 确保MariaDB用户有FILE权限,否则INTO OUTFILE会报错。
  • 导出的文件路径需是MariaDB有权限写入的目录(如/tmp),避免权限问题。

内容的提问来源于stack exchange,提问作者xentity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:22:50