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

Mysql 如何将sql数据正确导出到.csv,mysql,sql,Mysql,Sql,我正在尝试将一个非常大的数据从mysql导出到.csv,并使用 into outfile 在phpmyadmin。但是当我查看excel文件时,它是混乱的。mysql似乎无法确定长文本格式,因此它转到了另一行,如下图所示: 因此,当我试图将其导入到一个相同的表中时,一切都搞砸了。以下是我导入到其他表的代码: LOAD DATA INFILE 'final.csv' INTO TABLE oldforum_nodewithusers FIELDS TERMINATED BY ',' ENCL

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

into outfile
在phpmyadmin。但是当我查看excel文件时,它是混乱的。mysql似乎无法确定长文本格式,因此它转到了另一行,如下图所示:

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

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中某个单元格的文本限制


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

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


解释

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

windows选项

据我所知,在Windows中,除了
sed
之外,没有任何“本机”选项。但您可以安装Cygwin,它具有“与windows命令行兼容”的特性,可以复制大部分Linux功能。此外,您可能还想看看GnuWin32,它有一个
sed
(除其他外)的实现

我还在中找到了一种替代方法,可以创建类似于
sed
的VBScript,您可能需要查看它



尝试使用以下技巧获取标题:

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
实际上,通过删除
订单也可能有效:

select *
into outfile . . .
from ((select 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select col1, col2, . . . . -- data goes here
      )
     ) t
MySQL并不能保证头文件会首先出现,但实际上确实如此


此外,要做到这一点,请确保您的列正确地转换为您想要的字符串格式。

OMG im so dumb。答案很简单,我没有将其导出为.csv文件,而是将其导出为.sql文件。LOL非常简单

是什么阻止您使用单个插入查询并跳过文件中的部分?它们位于不同的数据库中。
select *
into outfile . . .
from ((select 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select col1, col2, . . . . -- data goes here
      )
     ) t