2013-03-19 11 views
5

Ho creato un database & sto tentando di caricare i dati da un file csv di un foglio di calcolo. Non ci sono ancora dati in esso. Quando eseguoerrore mysql 1406

LOAD DATA INFILE 'docs.csv' INTO list FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' (vendor, title, project, description, shelf); 

ottengo un messaggio "ERROR 1406 (22001): dati troppo lungo per la colonna 'vendor' alla riga 1". La voce del venditore alla riga 1 è tuttavia lunga 6 caratteri. Ho creato il mio tabella come segue:

CREATE TABLE list (
    autonumber SERIAL, 
    vendor  varchar(50), 
    title  varchar(100), 
    project  varchar(100), 
    description  text, 
    shelf  smallint UNSIGNED, 
PRIMARY KEY(autonumber)); 

Ci sono le virgole & ritorni a capo (Alt + Invio nel foglio di calcolo) in molte voci nella colonna descrizione; ho ragione nell'usare \ t per il comando TERMINATO CAMPI & i ritorni a capo causano problemi?

+1

Si sta specificando che i campi sono terminati da un carattere di tabulazione - è questo il separatore effettivo nel file CSV? Sembra che il separatore non venga trovato e mySQL stia tentando di inserire tutto nella colonna del fornitore come risultato –

+0

Come foglio di calcolo, la scheda passa ovviamente da una cella alla successiva, vale a dire che ogni campo si trova in una cella separata. Se apro il documento in un editor di testo, viene visualizzato "Jacobs, Report di riepilogo, Nuovo progetto di introduzione all'impianto, ...", - ogni voce sembra essere separata da una virgola. Nel campo Descrizione però ci sono virgole in uso comune. – user2165827

+0

Anche se sono usati, saranno stati sfuggiti, molto probabilmente essendo racchiusi tra i caratteri '' '. Vedere la risposta di @ Tom per far sapere a mySQL di questo. –

risposta

0

il valore è troppo lungo per questa colonna

cambio Da da 50 a 100 in quanto questo

 CREATE TABLE list (
    autonumber SERIAL, 
    vendor  varchar(100), 
    title  varchar(100), 
    project  varchar(100), 
    description  text, 
    shelf  smallint UNSIGNED, 
    PRIMARY KEY(autonumber)); 
0

Penso che avere caratteri di ritorno a capo in voi campi causerà problemi perché il separatore di linea è \ n . Un ritorno in carrozza in un campo verrà considerato come la fine del record in cui credo. Se puoi aggiungere identificatori tra virgolette ai tuoi campi, ciò potrebbe aiutarti.

Si avrebbe bisogno di aggiungere questa clausola per la sua dichiarazione infile:

OPTIONALLY ENCLOSED BY '"' 
0

dare il percorso completo del infile e fare il vostro codice come segue.

LOAD DATA INFILE 'docs.csv' INTO TABLE list 

FIELDS TERMINATED BY ',' 

ENCLOSED BY '"' 

LINES TERMINATED BY '\r\n' (vendor, title, project, description, shelf); 

dare il percorso del infile proprio come il seguente esempio ..

load data local infile 'c:/xampp/htdocs/example.csv' 

    into table mytbl fields terminated by ',' 

    enclosed by '"' 

    lines terminated by '\r\n' 

    ignore 1 lines (f_name,age,id); 

Spero che questo vi aiuterà fuori.

0

forse la codifica del file CSV non è uguale a set di caratteri mysql, questo sarà anche portare a "ERROR 1406 (22001): dati troppo lungo per la colonna 'vendor' a riga 1".

ad esempio, se il set di caratteri mysql è GBK, mentre il file csv è codificato in UTF-8, allora si verificherà lo stesso errore durante il caricamento.

basta cambiare la codifica del file come nel set di caratteri mysql.