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
相关产品推荐
相关产品推荐

