我有一个时间表数据库表,里面有一些常见的字段.

id, client_id, project_id, task_id, description, time, date 

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

我在那张表上运行了一个导出程序,一夜之间将其导出到一个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 ....

但是

当我try 查看输出文件的源代码时,文件中仍然存在换行符,因此Excel的CSV导入会中断Excel向导创建的所有高级宏和透视表.

有没有关于最佳行动方案的 idea ?

推荐答案

我认为你的声明应该是这样的:

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

基本上没有FIELDS ESCAPED BY '""'选项,OPTIONALLY ENCLOSED BY '"'将用于描述字段等,您的数字将被视为Excel中的数字(而不是由数字组成的字符串)

也可以试着打电话:

SET NAMES utf8;

在 Select outfile之前,这可能有助于内联字符编码(全部为UTF8)

让我们知道你进展如何.

Mysql相关问答推荐

完全相同的A B表达在SQL中的不同上下文中意外返回不同的结果

如何重新采样SQL数据库

MySQL添加表会将&@@&qot;追加到表名

MySQL在使用SELECT*时不使用索引

根据上一行S列结果计算列的查询

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

MySQL 可以用于将列表排序为三分之三吗?

使用sql查找源和最终目的地

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

判断一列中的多个值并返回值 1 或 0

使用 DISTINCT 时无法从数据库中查询所有数据

使用数据表的直方图(SQL 查询)

MySQL中的会话客户端是什么

基于 3 个条件 Select 3 行的最佳 MySQL 索引和查询

Select 在同一天售出不同活动门票的收银员

动态创建内联 SQL 表(用于排除左连接)

MySQL触发器在某些条件下防止INSERT

MAMP mysql 服务器无法启动.没有mysql进程正在运行

MySQL 整数与日期时间索引

在 Ubuntu 上安装 mysql gem 的困难