MySQL导出到outfile:CSV转义字符

Der*_*gan 43 mysql sql excel into-outfile

我有一个包含一些常见字段的时间表数据库表.

id, client_id, project_id, task_id, description, time, date 
Run Code Online (Sandbox Code Playgroud)

还有更多,但这就是它的要点.

我在该表上运行导出过夜的CSV文件,以便为用户提供其数据的备份.它还用作带有一些自定义报告的宏Excel文件的数据导入.

这一切都与我一起使用php循环遍历时间表并将行打印到文件.

问题在于大型数据库可能需要数小时才能运行,这是不可接受的.所以我用MySQL INTO OUTFILE命令重新编写它,它将它减少到几秒钟才能运行,这很棒.

现在的问题是我似乎无法在描述字段中转义所有新行字符等.实际上,用户可以在此输入任何字符组合,包括回车/新行.

这是我的MySQL代码的片段:

SELECT id, 
       client,
       project,
       task,
       REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description, 
       time,
       date  
      INTO OUTFILE '/path/to/file.csv'
      FIELDS ESCAPED BY '""'
      TERMINATED BY ',' ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      FROM ....
Run Code Online (Sandbox Code Playgroud)

但...

当我尝试查看输出文件的来源时,文件中仍然存在换行符,因此Excel的CSV导入会破坏Excel向导创建的所有奇特的宏和数据透视表.

关于最佳行动方案的任何想法?

Que*_*ark 77

我认为你的陈述应该是这样的:

SELECT id, 
   client,
   project,
   task,
   description, 
   time,
   date  
  INTO OUTFILE '/path/to/file.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM ts
Run Code Online (Sandbox Code Playgroud)

主要是没有FIELDS ESCAPED BY '""'选项,OPTIONALLY ENCLOSED BY '"'将为描述字段等操作,你的数字将被视为Excel中的数字(不是由数字组成的字符串)

也可以试试:

SET NAMES utf8;
Run Code Online (Sandbox Code Playgroud)

在outfile选择之前,这可能有助于内联字符编码(所有UTF8)

让我们知道您的身体情况如何.


小智 15

以下是这里的工作:模拟Excel 2003(另存为CSV格式)

SELECT 
REPLACE( IFNULL(notes, ''), '\r\n' , '\n' )   AS notes
FROM sometables
INTO OUTFILE '/tmp/test.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Run Code Online (Sandbox Code Playgroud)
  1. Excel保存\ r \n用于行分隔符.
  2. Excel为列数据中的换行符保存\n
  3. 必须首先替换数据中的\ r \n否则Excel将认为它是下一行的开始.