LOAD DATA LOCAL INFILE не импортирует никаких записей

Я работаю над проектом, который требует импорта данных CSV в таблицу MySQL, используя Workbench. Я попытался запустить команду ниже. Я не получаю никаких ошибок, однако никакие записи не импортируются в таблицу. Обратите внимание, я попытался изменить строку, оканчивающуюся на \n тоже попробовал \r, что привело к тому же результату.

Я ценю любые предложения о том, как решить.

Это запрос, который я пытался:

LOAD DATA LOCAL INFILE 'data-to-import.csv' INTO TABLE db.t1
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES
(id,age,spns,pns,spns2,sns,ps,ss,gid,term,band)

Данные к import.csv

 ,18,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,19,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,20,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,21,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,22,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,23,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,24,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,25,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,26,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,27,0.455,0.62,0.774,1.083,2.408,3.702,1,10,1
 ,28,0.455,0.62,0.774,1.088,2.416,3.702,1,10,1
 ,29,0.455,0.62,0.792,1.121,2.489,3.702,1,10,1

определение db.t1

   CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) NOT NULL,
  `spns` decimal(4,4) NOT NULL,
  `pns` decimal(4,4) NOT NULL,
  `spns2` decimal(4,4) NOT NULL,
  `sns` decimal(4,4) NOT NULL,
  `ps` decimal(4,4) NOT NULL,
  `ss` decimal(4,4) NOT NULL,
  `gid` int(11) NOT NULL,
  `term` int(11) DEFAULT NULL,
  `band` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

1 ответ

При взгляде на ваш SQL кажется, что у вас могут быть проблемы с ограничителем строки.

Попробуй это:

LOAD DATA LOCAL INFILE 'data-to-import.csv' INTO TABLE db.t1
COLUMNS TERMINATED BY ','
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES
(id,age,spns,pns,spns2,sns,ps,ss,gid,term,band)

Если ваш файл поступил из Windows, терминатор строки - CR/LF. У вас это как LF/CR.

Если файл взят из *nux, ваш терминатор строки - это просто перевод строки, в этом случае ваш SQL будет выглядеть так:

LOAD DATA LOCAL INFILE 'data-to-import.csv' INTO TABLE db.t1
COLUMNS TERMINATED BY ','
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES
(id,age,spns,pns,spns2,sns,ps,ss,gid,term,band)

Надеюсь это поможет!


Я просто запустил следующий код:

drop schema if exists db;
create schema db;
use db;

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) NOT NULL,
  `spns` decimal(4,4) NOT NULL,
  `pns` decimal(4,4) NOT NULL,
  `spns2` decimal(4,4) NOT NULL,
  `sns` decimal(4,4) NOT NULL,
  `ps` decimal(4,4) NOT NULL,
  `ss` decimal(4,4) NOT NULL,
  `gid` int(11) NOT NULL,
  `term` int(11) DEFAULT NULL,
  `band` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

LOAD DATA LOCAL INFILE 'c:/temp/data-to-import.csv' INTO TABLE db.t1
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES
(id,age,spns,pns,spns2,sns,ps,ss,gid,term,band);

SELECT * FROM t1;

Я скопировал данные из того, что вы опубликовали, и поместил их в мою временную папку. Работал нормально.

Прежде всего, данные, которые вы разместили, НЕ имели строки заголовка, поэтому я не уверен, почему у вас есть IGNORE 1 LINES там.

Кроме того, попробуйте указать путь к имени файла, как я, и посмотрите, работает ли он.

Если это не так, пожалуйста, дайте мне знать, где файл возник. Это все еще может быть проблемой с ограничителем строки.


Итак, основываясь на нашем чате, вы работаете в Mac OSX, и терминатор строки - "\r". Просто используйте это, и вам должно быть хорошо идти.

Другие вопросы по тегам