【问题标题】:MySQL INTO OUTFILE issue with new lines in contentMySQL INTO OUTFILE 问题,内容中有新行
【发布时间】:2016-01-27 11:43:47
【问题描述】:

我正在导出带有 shell 文件的数据库报告。如果我在 PHPMyAdmin 中运行查询,则文件输出正常,仅在数据库中每行末尾的新行。

但是,当我使用 outfile 在 shell 脚本中运行查询以生成文件时,我在某些列内容中得到 /n、/r 和 /r/n。我不知道是什么原因造成的,也不知道如何避免。

问题似乎只在示例导出中的第三个颜色列中引起。

查询:

mysql $MYSQLOPTS << EOFMYSQL
SELECT Product_Name, Item_Size, Item_Colour, Item_Price, Current_Stock, Item_Price * Current_Stock AS Stock_Value
FROM Items
ORDER BY Product_Name
INTO OUTFILE '$FILE'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
EOFMYSQL

示例结果:

"Scarf_in_Peach","ONE SIZE","12/04-B2B2 ",10.00,3,30.00
"Scarf_in_Pink","ONE SIZE ","11/06-odds-C1C12100",10.00,0,0.00
"Scarf_in_Red","ONE SIZE ","11/06-B7B2-C1C12100",10.00,0,0.00
"Scarf_in_Sand_","ONE SIZE","11/06-B1I3-C1C12100
",10.00,0,0.00
"Scarf_in_Sand_/_Blue_Flowers","ONE SIZE","12/04-B2E2-C1C12100 ",10.00,4,40.00
"Scarf_in_Teal","ONE SIZE","11/06-B5G1-C1C12100
",10.00,0,0.00
"Scarf_in_Teal_/_Red_Flowers","ONE SIZE","12/04 - B2B2 ",10.00,1,10.00
"Sunrise_Skinnies","16","ODD-R1S009-1-BLUE",20.00,0,0.00
"Sunrise_Skinnies","8","ODD-R1S009-1

BLUE",20.00,0,0.00

【问题讨论】:

  • 您是否测试过您的数据以查看您的字段中是否确实有空格(即 \n)?我问是因为最后我看到了一些记录的空格,也许你也有\n
  • 在数据库中,其中一些确实有换行符,但是当我从 PHPmyAdmin 导出到 CSV 时,我没有。即使我没有选择“删除列中的回车/换行符”,它们也很好。
  • 在您的查询中,您可以用空字符串替换回车符和换行符。
  • 你能看看this question
  • @Shadow 如果我将选择中的颜色列更改为REPLACE(REPLACE(Item_Colour, CHAR(13), ' '), CHAR(10), ' '),这似乎确实有效。虽然在没有长字符串的情况下转义所有列的方法是理想的,但对于这个脚本来说已经足够了。谢谢。

标签: mysql shell carriage-return


【解决方案1】:

你有两个选择:

  1. 在查询中将回车符和换行符替换为空字符串。优点:完全取决于您过滤掉哪些字符以及从哪些字段。缺点:您必须手动为每个受影响的字段创建表达式。

  2. 使用SELECT ... INTO OUTFILE ... 命令的FIELDS ESCAPED BY character 选项:

FIELDS ESCAPED BY 控制如何写入特殊字符。如果 FIELDS ESCAPED BY character 不为空,必要时使用 避免歧义作为前缀在后面的字符之前 输出:

  • 字符转义的字段

  • 字段[可选地]被字符包围

  • FIELDS TERMINATED BY 和 LINES TERMINATED BY 值的第一个字符

  • ASCII NUL(零值字节;实际写在转义字符后面的是 ASCII “0”,而不是零值字节)

由终止、封闭、转义或终止的字段 BY 字符必须转义,以便您可以重新读取文件 可靠。 ASCII NUL 被转义以使其更易于查看 寻呼机。

Pro:这是一种快速且标准的方法,您可以使用此方法轻松地将其应用于所有导出功能。缺点:不太灵活。例如,如果以选项终止的行设置为\n,则\r 不会被转义,这仍然会在某些系统上导致一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2010-11-05
    • 2010-10-31
    • 2014-04-11
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多