【问题标题】:quote in csv file to import into MySQL在 csv 文件中引用以导入 MySQL
【发布时间】:2017-03-04 09:08:05
【问题描述】:

在 Mac OSX 上使用 MySQL 并使用 MySQL Workbench 执行 SQL,这里是 csv 文件的 SQL 查询和内容,我想输入带引号的字符串,例如我想输入f"o"o,我尝试使用@ 987654324@,但似乎不起作用,有什么想法如何为 csv 文件中的列导入引号?

SQL 查询

LOAD DATA LOCAL INFILE '/Users/foo/Downloads/import.csv' 
INTO TABLE tasks 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

表架构

create database exercise;
CREATE TABLE IF NOT EXISTS tasks (
  task_id INT(11) NOT NULL AUTO_INCREMENT,
  subject VARCHAR(45) DEFAULT NULL,
  start_date DATE DEFAULT NULL,
  end_date DATE DEFAULT NULL,
  description VARCHAR(200) DEFAULT NULL,
  PRIMARY KEY (task_id)

CSV 文件内容

1,"hello/world",,,"f\"o\"o"
2,"hello/world",,,"g\"o\"o"
3,"hello/world",,,"z\"o\"o"

导入后的内容

SELECT * FROM exercise.tasks;

编辑 1,

尝试使用双引号对引号进行编码,尝试了这种方式,导入后仍然和我发布的屏幕快照一样。

1,"hello/world",,,"f""o""o"
2,"hello/world",,,"g""o""o"
3,"hello/world",,,"z""o""o"

编辑2,试过了,还是不行,(导入后是foo而不是foo)

1,"hello/world",,,f'o'o
2,"hello/world",,,g'o'o
3,"hello/world",,,z'o'o

编辑3,试过了,还是不行,(导入后是foo而不是foo)

1,"hello/world",,,"f''o''o"
2,"hello/world",,,"g'o''o"
3,"hello/world",,,"z''o''o"

编辑 4,我看到了警告,

LOAD DATA LOCAL INFILE '/Users/foo/Downloads/import.csv'  INTO TABLE tasks  FIELDS TERMINATED BY ','  ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'  3 row(s) affected, 6 warning(s): 1265 Data truncated for column 'start_date' at row 1 1265 Data truncated for column 'end_date' at row 1 1265 Data truncated for column 'start_date' at row 2 1265 Data truncated for column 'end_date' at row 2 1265 Data truncated for column 'start_date' at row 3 1265 Data truncated for column 'end_date' at row 3 Records: 3  Deleted: 0  Skipped: 0  Warnings: 6

问候, 林

【问题讨论】:

    标签: mysql sql csv mysql-workbench


    【解决方案1】:

    封闭字符的加倍确实应该起作用。也许有一个不同的问题导致您的导入失败?还要检查原始文本输出 (Query -> Execute .. to Text) 或命令行客户端。

    或者,您可以使用不同的封闭字符。那么使用单引号呢?如果您的文本中没有逗号(即用作字段终止符的字符),您可以完全省略封闭字符(因为在这种情况下字段终止符足以分隔条目)。

    【讨论】:

    • 嗨,迈克,我尝试了您的 Query -> Execute .. to Text 方法,还尝试在开头和结尾删除双引号,但两种方法都不起作用。我发布了编辑 2 和编辑 3,我还注意到一个警告,在那里发布但不确定它是否与这个问题有关?你提到了命令行客户端?你的意思是一些工具可以导入 csv 文件还是只执行 SQL 查询?
    • 顺便说一句,如果您尝试我发布的简单 import.csv 文件,它对您有用吗?
    • 谢谢 Mike,我发现我身边有一个问题,我修复了它,然后你的解决方案就起作用了。将您的回复标记为答案并投票。
    【解决方案2】:

    你应该用双引号来转义它们:f""o""o

    MySQL Doc:

    为避免歧义,ENCLOSED BY 字符出现在 字段值可以加倍并被解释为 角色。

    【讨论】:

    • 嗨 Scarabee,试过你的方法不起作用,请参阅我的更新编辑 1 部分。
    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多