1

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

into outfile

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

在此处输入图像描述

因此,当我尝试将其导入到相同的表中时,一切都搞砸了。这是我到其他表的导入代码:

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'

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

我现在知道问题了,图片中下一行的文字超出了 Excel 中某个单元格的文字限制

因此,当我将其导入另一个表时,该表会将“下一行”文本视为另一行。有人对此有解决方案吗?

4

3 回答 3

0

天哪,我太笨了。答案很简单,我没有将其导出为 .csv 文件,而是将其导出为 .sql。LOL 非常简单易行

于 2013-04-04T19:30:47.213 回答
0

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

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

解释

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

一个窗口选项

据我所知,sed在 Windows 中没有“本机”替代品。但是您可以安装 Cygwin,它具有“与 Windows 命令行兼容”的功能,可以复制大部分 Linux 功能。此外,您可能想看看 GnuWin32,它具有sed(除其他外)的实现

我还在cmd.exe 是否有类似 sed 的实用程序?要创建类似于 的 VBScript sed,您可能需要检查一下。


于 2013-04-04T18:38:49.827 回答
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 不保证 headers 将首先出现,但在实践中确实如此。

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

于 2013-04-04T19:03:17.153 回答