2013-03-19 9 views
5

Utworzono bazę danych & Próbuję wczytać dane z pliku CSV arkusza kalkulacyjnego. Nie ma jeszcze żadnych danych. Kiedy uruchomienieBłąd mysql 1406

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

uzyskać komunikat "ERROR 1406 (22001): dane zbyt długo w kolumnie 'sprzedawca' w rzędzie 1". Pozycja dostawcy w pierwszym rzędzie ma długość 6 znaków. Stworzyłem następująco mój tabeli:

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

Istnieje przecinki & powrotu karetki (Alt + Enter w arkuszu kalkulacyjnym) w wielu wpisów w kolumnie opisu; Czy mam prawo używać \ t dla polecenia ZATWIERDZONE FIELDS &, czy powrót karetki spowoduje problemy?

+1

Podajesz, że pola kończą się znakiem tabulacji - czy jest to rzeczywisty separator w pliku CSV? Wygląda na to, że separator nie został znaleziony, a mySQL próbuje wstawić wszystko do kolumny dostawcy jako wynik –

+0

Jako arkusz kalkulacyjny zakładka oczywiście przemieszcza się z jednej komórki do drugiej, to znaczy, że każde pole znajduje się w oddzielnej komórce. Jeśli otworzę dokument w edytorze tekstowym, wyświetli się "Jacobs, raport podsumowujący, projekt nowego zakładu, ..." - każda pozycja wydaje się być oddzielona przecinkiem. W polu Opis są jednak przecinki w powszechnym użyciu. – user2165827

+0

Pomimo tego, że są używane, zostaną usunięte, najprawdopodobniej poprzez umieszczenie ich w znakach ''. Zobacz odpowiedź @ Toma, aby powiadomić mySQL o tym. –

Odpowiedz

0

wartość jest zbyt długa dla tej kolumny

próba zmiany od 50 do 100, jak to

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

myślę posiadające znaki powrotu karetki w was pól spowoduje kłopoty, ponieważ separator linia \ n . Zwrot karetki w polu będzie uważany za koniec rekordu. Jeśli możesz dodać do swoich pól cytowane identyfikatory, może to pomóc.

Trzeba by dodać do tej klauzuli plik_we stwierdzeniem:

OPTIONALLY ENCLOSED BY '"' 
0

podać pełną ścieżkę dostępu do pliku wejściowego i zrobić swój kod w następujący sposób.

LOAD DATA INFILE 'docs.csv' INTO TABLE list 

FIELDS TERMINATED BY ',' 

ENCLOSED BY '"' 

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

podać ścieżkę do pliku wejściowego, tak jak w poniższym przykładzie ..

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); 

nadzieję, że będzie ci pomóc.

0

może Twój kodowanie pliku CSV nie jest taki sam jak zestaw znaków mysql, będzie to również prowadzić do „ERROR 1406 (22001): dane zbyt długo na kolumnie«sprzedawcę»w wierszu 1”.

na przykład, jeśli zestaw znaków mysql to GBK, podczas gdy plik csv jest zakodowany w UTF-8, to spowoduje to ten sam błąd podczas ładowania.

wystarczy zmienić kodowanie pliku na taki sam, jak zestaw znaków mysql.

Powiązane problemy