MySQL - 使用引号将某些列导出到csv,而将某些列导出到csv;由于工作不正常而被选择性封闭

时间:2016-02-06 00:38:05

标签: mysql csv export-to-csv

我正在导出一个MySQL表,我想导出没有双引号的整数类型列,但是带有双引号的varchar类型列。我需要这样做才能为我工作的下一步提供正确的格式。这可以在MySQL中完成吗?我知道我可以在python脚本中执行此操作,但csv文件非常大(> 1 GB),所以我认为可能需要一段时间才能完成。无论如何,这是否可以使用MySQL查询?

这是我当前的导出脚本格式:

SELECT 
   'column_name_1',
   'column_name_2',
   ...
   'column_name_n'
UNION ALL
SELECT *
FROM table
INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

如果有帮助,这是我试图导出的表格(更重要的是涉及的类型):

+-------------------------+------------------+------+-----+---------+-------+
| Field                   | Type             | Null | Key | Default | Extra |
+-------------------------+------------------+------+-----+---------+-------+
| field_1                 | int(10) unsigned | NO   | MUL | 0       |       |
| field_2                 | int(10) unsigned | NO   | MUL | NULL    |       |
| field_3                 | int(10) unsigned | NO   |     | NULL    |       |
| field_4                 | char(1)          | NO   |     | NULL    |       |
| field_5                 | int(10) unsigned | NO   |     | NULL    |       |
| field_6                 | varchar(4)       | NO   |     |         |       |
| field_7                 | char(1)          | NO   |     | Y       |       |
| field_8                 | varchar(20)      | NO   |     |         |       |
| field_9                 | varchar(200)     | NO   |     |         |       |
+-------------------------+------------------+------+-----+---------+-------+

编辑1:我尝试过选择性地使用'"''正如在答案中所建议的,但当我将其添加到脚本时,它会双引号引用每一列,而不仅仅是字符串(或varchar)列。知道为什么会这样做吗?

1 个答案:

答案 0 :(得分:6)

使用OPTIONALLY ENCLOSED BY子句。

SELECT *
FROM table
INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

OPTIONALLY修饰符使其仅对字符串列执行此操作。

您还需要省略返回标题行的子查询。问题是union的所有行都需要在列中具有相同的类型,因此它将所有非字符串转换为字符串以匹配标题行。