如何正确导出sql数据到.csv

时间:2013-04-04 18:31:01

标签: mysql sql

我正在尝试将一个非常大的数据从mysql导出到.csv,并使用

将.csv导入到另一个相同的表中
into outfile
在phpmyadmin中

。但是当我查看excel文件时,它就搞砸了。似乎mysql无法确定longtext格式,因此它会转到另一行,如下所示:

enter image description here

所以当我尝试将它导入到一个相同的表时,它都搞砸了。这是我对其他表的导入代码:

LOAD DATA INFILE 'final.csv'
INTO TABLE oldforum_nodewithusers
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'

顺便说一句,我手动输入表格的标题,因为我不知道如何将标题放在导出代码中。这是我的导出代码:

SELECT 'some table columns'
into outfile 'final.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

那么如何解决这个问题呢?它在出口部分吗?还是导入部分?

我现在知道问题,他们在图片中的下一行中出现的问题超出了EXCELL细胞的文本限制

所以当我将它导入另一个表时,该表会将“next lined”文本视为另一行。有人有解决方案吗?

3 个答案:

答案 0 :(得分:0)

我会使用命令行方法(这对我来说很好)。在Linux(和其他Unix系统)上:

$ mysql [connection parameters] yourDB -e"select..." | sed 's/\t/,/g' > yourOutput.csv

<强>解释

  • [connection parameters]件必须包含:-h YourHost(其中YourHost必须是有效的IP地址或服务器名称,或localhost),-u YourUser和{ {1}}(请注意,您不得在-pYourPassword-p)之间留空格
  • YourPassword将查询结果输出到标准输出(您的控制台),用制表符(`\ t')分隔字段。
  • mysql ... -e"select..." \ t`)逗号。它接受上一个命令的输出进行处理,并将结果输出到标准输出
  • | sed 's/\t/,/g' replaces all tabs (将上一个命令的输出重定向到文件而不是控制台

Windows选项

据我所知,Windows中没有> yourOutput.csv的“原生”替代品。但是你可以安装Cygwin,它具有复制大多数Linux功能的“windows命令行兼容”功能。您也可以查看GnuWin32,它具有sed的实现(除其他外)

我还在Is there any sed like utility for cmd.exe中找到了一个替代方法来创建类似于sed的VBScript,您可能需要查看它。


答案 1 :(得分:0)

尝试使用此技巧获取标题:

select col1, col2 . . . -- export columns go here
into outfile . . .
from ((select 1 as isheader, 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select 0 as isheader, col1, col2, . . . . -- data goes here
      )
     ) t
order by isheader desc

实际上,删除order by可能也有效:

select *
into outfile . . .
from ((select 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select col1, col2, . . . . -- data goes here
      )
     ) t

MySQL并不保证标题首先出现,但它们确实在实践中。

另外,为此,请确保将列正确转换为所需的字符串格式。

答案 2 :(得分:0)

我太傻了。答案非常简单,而不是将其导出到.csv文件,我将其导出到.sql。大声笑非常简单