将mysql查询结果转换为CSV(使用复制/粘贴)

将mysql查询结果转换为CSV(使用复制/粘贴),mysql,csv,export,numbers,Mysql,Csv,Export,Numbers,我经常在命令行mysql中工作。一种常见的需求是获取查询结果并将其导入类似于Excel文档的文档中 最快的方法是什么 方法1:选择输入输出文件 您可以直接从MySQL选择一个输出文件,但这需要几个步骤 导出带有所有必要参数的查询,使其成为CSV格式,如字段可选地由括起并由分隔。 将sftp导入服务器并抓取文件 从服务器上删除该文件 方法2:复制/粘贴 我倾向于用这种方法。对我来说,这似乎快了一点,但这主要是因为我不记得如何从上面构造SELECT INTO OUTFILE查询,并且必须查找它 复制

我经常在命令行mysql中工作。一种常见的需求是获取查询结果并将其导入类似于Excel文档的文档中

最快的方法是什么

方法1:选择输入输出文件 您可以直接从MySQL选择一个输出文件,但这需要几个步骤

导出带有所有必要参数的查询,使其成为CSV格式,如字段可选地由括起并由分隔。 将sftp导入服务器并抓取文件 从服务器上删除该文件 方法2:复制/粘贴 我倾向于用这种方法。对我来说,这似乎快了一点,但这主要是因为我不记得如何从上面构造SELECT INTO OUTFILE查询,并且必须查找它

复制/粘贴到本地文本文件 在文本编辑器中打开并将|替换为, 另存为CSV并以数字形式打开。
您还可以将mysql命令行实用程序与-e选项一起使用,并将输出通过管道传输到文件。这将以制表符分隔的格式输出数据。

我认为您的选项1是最好的—只需执行一次并打印正确的选项,或者更好,创建一个小脚本,它将接受查询并自动添加您最喜欢的封闭和分隔符选项

如果您为自己的客户端平台安装mysql客户端实用程序,并在可能的情况下从工作站直接连接到mysql服务器,您也可以跳过步骤2和步骤3。

您可以执行选择。。。输入本地计算机上的OUTFILE查询,并让它在本地保存文件。如果您在本地安装了*命令行实用程序,只需添加-h标志即可连接到特定主机。mysql还可以读取标准输入,因此您可以设置一个用于导入的.sql文件

SQL文件outfile.SQL:

然后,您将发出以下命令:

mysql -u <user> -p -h <server_ip_address> <outfile.sql
请注意,创建一个新用户可能是一个好主意,该用户可以从您的远程IP地址进行连接,具有权限,并且只选择访问您需要查询的表

最初只是一点设置,但最终,您可以将mysql命令粘贴到批处理文件中,并使其成为一个两次单击的过程

*我相信您必须下载MySQL CLI附带的完整MySQL系统。

Excel在“数据”菜单下有一个文本到列功能,允许您指定自定义delimeter。我猜数字也会有类似的功能。如果是这样,那么解决方案是直接复制并粘贴到数字文档中,然后将这些文本单元格转换为指定|作为分隔符的列。

这怎么样

mysql-B-e$MY\u QUERY>MY\u data.csv

输出格式实际上是以制表符分隔的,而不是以逗号分隔的 但至少Excel和OpenOffice Calc会自动适应这种情况

顺便说一句,为了方便和实现非交互式执行 mysql命令,我强烈建议设置一个安全的~/.my.cnf文件 只能由您使用以下条目读取:

[client]
user=YOUR_MYSQL_USER_NAME
password=YOUR_MYSQL_PASSWORD
host=YOUR_MYSQL_SERVER
port=YOUR_MYSQL_SERVER_PORT
WHATEVER_OTHER_OPTIONS_YOU_LIKE
参考资料:

-批次-B

使用tab作为列分隔符打印结果,每行在新行上。使用此选项,mysql不使用历史文件


批处理模式导致非并行输出格式和特殊字符的转义。可以使用原始模式禁用转义;请参阅-raw选项的说明。

通过以下修改使用第一种方法:

您可以在本地计算机上运行该命令并直接保存该文件,而无需在服务器上运行该命令并将其删除。为此,必须使用ssh将mysql端口转发到本地计算机上的空闲端口

ssh -L 3306:localhost:3306 user@remoteserver
第一个3306是本地机器上的端口。localhost指的是remoteservers主机名。第二个3306是远程机器上的端口,应转发。如果MySQL服务器运行在不同的端口上,则必须使用该端口。登录后,只要您想工作,ssh会话就会一直打开

在新的终端窗口中,您可以启动mysql会话

mysql -hlocalhost -uUser -p --port=3306

这种方法的优点是,您不必将MySQL服务器公开到Internet上,并且通过加密隧道传输所有数据。

这是否会产生CSV?mysql-eShowDatabases;。这似乎是正常的mysql输出,用|代替逗号。@Lucas:false。如果mysql通过管道传输到其他地方,或者与-B批处理选项结合使用,mysql-e将提供以制表符分隔的输出?或者你是指sftp?我会更正原始帖子。谢谢,回答得很好。这正是我想要的。但是我在错误的答案上点击了“接受答案”,所以很抱歉你没有得到赏金分数。我欠你一杯啤酒。你的例子使用了-b,正如你稍后指出的那样,是-b。谢谢你的理解。我已经编辑了答案以更正它。
mysql -hlocalhost -uUser -p --port=3306