以下是我用于将CSV文件导入MySQL数据库的代码。它可以很好地划分所有领域及其记录。
LOAD DATA INFILE 'file.csv'
INTO TABLE customer FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'
(
ID, name, salary, address, status
);
但是,当存在由逗号(',')组成的VARCHAR或TEXT字段时,它的工作方式不正确。这是因为我使用FIELDS TERMINATED BY','用于分隔每个字段记录。
因此,例如,如果客户的工资为50,000(双倍),则会正常拆分该字段。但是,如果客户地址是Java Road 15,香港(varchar / text),Java Road 15将保存在地址栏中,而香港将保存到状态栏。这基本上删除了状态字段中的任何记录。这个问题的任何线索?提前谢谢。
答案 0 :(得分:1)
字段是用双引号括起来还是别的?如果是这样,您可以在查询中添加“ENCLOSED BY”。
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n';
“Enclosed by”指定用于标识字段开头和结尾的字符。在您的情况下,字段用双引号括起来,例如“Java Road 15,Hong Kong”。即使字段中有字段分隔符,它也可以帮助MYSQL正确提取字段。
MYSQL手册:https://dev.mysql.com/doc/refman/5.7/en/load-data.html
答案 1 :(得分:0)
LOAD DATA INFILE 'file.csv'
INTO TABLE customer FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
(
ID, name, salary, address, status
);
试试这个。
答案 2 :(得分:0)
如果有人偶然发现这个答案,我想分享b / c,这花了我太长时间才弄明白 - 使用mac,datagrip,mysql 5.7+,调查回复问题:
DROP TABLE IF EXISTS surveyQuestion_ID;
#create table
CREATE TABLE surveyQuestion_ID
(
surveyQuestion_ID INT(11) NOT NULL,
surveyDescription TEXT,
surveyResponse VARCHAR(25) DEFAULT NULL,
PRIMARY KEY (surveyQuestion_ID)
);
#load query
LOAD DATA LOCAL INFILE 'file_location/file.csv' INTO TABLE surveyQuestion_ID
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(surveyQuestion_ID, surveyDescription, surveyResponse);
希望这会有所帮助。