MySQL导出表到CSV

时间:2019-11-20 08:52:13  来源:igfitidea点击:

简介:在本教程中,您将学习如何将MySQL表导出到CSV文件的各种技术。

CSV代表逗号分隔的值。
您通常使用CSV文件格式在Microsoft Excel,Open Office,Google Docs等应用程序之间交换数据。

从MySQL数据库以CSV文件格式获取数据将很有用,因为您可以按所需方式分析和格式化数据。

MySQL提供了一种简单的方法来将查询结果导出到驻留在数据库服务器中的CSV文件中。

导出数据之前,必须确保:

  • MySQL服务器的进程对包含目标CSV文件的目标文件夹具有写访问权限。

  • 目标CSV文件必须不存在。

以下查询从订单表中选择已取消的订单:

SELECT 
    orderNumber, status, orderDate, requiredDate, comments
FROM
    orders
WHERE
    status = 'Cancelled';

要将结果集导出到CSV文件中,请在上面的查询中添加一些子句,如下所示:

SELECT 
    orderNumber, status, orderDate, requiredDate, comments
FROM
    orders
WHERE
    status = 'Cancelled' 
INTO OUTFILE 'C:/tmp/cancelled_orders.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ';' 
ESCAPED BY '"' 
LINES TERMINATED BY '\r\n';

该语句在包含结果集的C:\ tmp文件夹中创建了一个名为cancelled_orders.csv的CSV文件。

CSV文件包含结果集中的行行。
每行由一系列回车和由LINES TERMINATED BY'\ r \ n'子句指定的换行符终止。
每行包含结果集中该行每一列的值。

每个值都用由FIELDS ENCLOSED BY'"'子句指示的双引号引起来。
这样可以防止可能包含逗号(,)的值将被解释为字段分隔符。
用双引号将值引起来时,该值内的逗号不会被识别为字段分隔符。

将数据导出到文件名包含时间戳的CSV文件

您通常需要将数据导出到CSV文件中,该文件的名称包含创建该文件的时间戳。
为此,您需要使用MySQL准备语句。

以下命令将整个订单表导出到CSV文件中,并将时间戳作为文件名的一部分。

SET @TS = DATE_FORMAT(NOW(),'_%Y_%m_%d_%H_%i_%s');

SET @FOLDER = 'c:/tmp/';
SET @PREFIX = 'orders';
SET @EXT    = '.csv';

SET @CMD = CONCAT("SELECT * FROM orders INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,
				   "' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"'",
				   "  LINES TERMINATED BY '\r\n';");

PREPARE statement FROM @CMD;

EXECUTE statement;

让我们更详细地研究上述命令。

  • 首先,我们使用当前时间戳作为文件名的一部分来构造查询。

  • 其次,我们使用PREPARE语句FROM命令准备了要执行的语句。

  • 第三,我们使用EXECUTE命令执行了该语句。

您可以按事件包装命令,并计划在需要时定期运行事件。

导出带有列标题的数据

如果CSV文件包含第一行作为列标题,将很方便,以便使文件更易于理解。

要添加列标题,您需要使用UNION语句,如下所示:

(SELECT 'Order Number','Order Date','Status')
UNION 
(SELECT orderNumber,orderDate, status
FROM orders
INTO OUTFILE 'C:/tmp/orders.csv'
FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'
LINES TERMINATED BY '\r\n');

如查询所示,您需要包括每列的列标题。

处理NULL值

如果结果集中的值包含NULL值,则目标文件将包含" N而不是NULL。
要解决此问题,您需要用另一个值替换NULL值,例如,不适用IFNULL函数为以下查询:

SELECT 
    orderNumber, orderDate, IFNULL(shippedDate, 'N/A')
FROM
    orders INTO OUTFILE 'C:/tmp/orders2.csv' 
    FIELDS ENCLOSED BY '"' 
    TERMINATED BY ';' 
    ESCAPED BY '"' LINES 
    TERMINATED BY '\r\n';

我们用N / A字符串替换了出厂日期列中的NULL值。
CSV文件显示N / A而不是NULL值。

使用MySQL Workbench将数据导出到CSV文件

如果您无权访问数据库服务器以获取导出的CSV文件,则可以使用MySQL Workbench将查询结果集导出到本地计算机中的CSV文件,如下所示:

  • 首先,执行查询以获取其结果集。

  • 其次,在结果面板中,单击"将记录集导出到外部文件"。
    结果集也称为记录集。

  • 第三,显示一个新对话框。
    它要求您提供文件名和文件格式。
    输入文件名,选择CSV作为文件格式,然后单击"保存"按钮。

MySQL Workbench导出的CSV文件支持列标题,NULL值和其他重要功能。