将 MySQL 导出为 CSV,一些列有引号,一些没有
Export MySQL to CSV, some columns with quotes and some without
我正在导出 MySQL table,我想导出不带双引号的整数类型列,但要导出带双引号的 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';
如果有帮助,这里是 table(更重要的是,涉及的类型)我正在尝试导出:
+-------------------------+------------------+------+-----+---------+-------+
| 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:我按照答案中的建议尝试了 OPTIONALLY ENCLOSED BY '"'
,但是当我将其添加到脚本中时,它会在每一列上加双引号,而不仅仅是字符串(或 varchar)列。知道它为什么会这样做吗?
使用 OPTIONALLY ENCLOSED BY
子句。
SELECT *
FROM table
INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
OPTIONALLY
修饰符使其仅对字符串列执行此操作。
您还需要省略 returns header 行的子查询。问题是联合的所有行都需要在列中具有相同的类型,因此它将所有 non-strings 转换为字符串以匹配 header 行。
我正在导出 MySQL table,我想导出不带双引号的整数类型列,但要导出带双引号的 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';
如果有帮助,这里是 table(更重要的是,涉及的类型)我正在尝试导出:
+-------------------------+------------------+------+-----+---------+-------+
| 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:我按照答案中的建议尝试了 OPTIONALLY ENCLOSED BY '"'
,但是当我将其添加到脚本中时,它会在每一列上加双引号,而不仅仅是字符串(或 varchar)列。知道它为什么会这样做吗?
使用 OPTIONALLY ENCLOSED BY
子句。
SELECT *
FROM table
INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
OPTIONALLY
修饰符使其仅对字符串列执行此操作。
您还需要省略 returns header 行的子查询。问题是联合的所有行都需要在列中具有相同的类型,因此它将所有 non-strings 转换为字符串以匹配 header 行。