Błąd "error code: 1265. Data truncated for column"

0

Witam,

Zaczynam przygodę z SQL, chciałem stworzyć tabelę z pliku CSV.

Utworzyłem tabelę:

CREATE TABLE TED_TALKS (
  talk_id INT,
  title CHAR(100),
  speaker CHAR(100),
  recorded_date DATE,
  published_date DATE,
  event CHAR(40),
  duration INT,
  views INT,
  likes INT 
);

I chciałem wczytać danę z pliku do tabeli:

LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\20221013_ted_talks.csv'
INTO TABLE TED_TALKS
LINES TERMINATED BY '\r\n'
;

Niestety pokazuję się błąd.

Error Code: 1265. Data truncated for column 'talk_id' at row 1

Rozumiem, że mam błędny typ danych w tabeli w pierwszej kolumnie, chociaż ID to liczba a liczba powinna być traktowana jako INT, proszę o pomoc.

Podgląd pliku CSV:

1,Averting the climate crisis,Al Gore,2006-02-25,2006-06-27,TED2006,957,3681537,110000
7,Simplicity sells,David Pogue,2006-02-24,2006-06-27,TED2006,1266,2012797,60000
53,Greening the ghetto,Majora Carter,2006-02-26,2006-06-27,TED2006,1096,3006315,90000
92,The best stats you've ever seen,Hans Rosling,2006-02-22,2006-06-27,TED2006,1176,15432904,462000
66,Do schools kill creativity?,Sir Ken Robinson,2006-02-25,2006-06-27,TED2006,1151,73935964,2200000
86,Letting go of God,Julia Sweeney,2006-02-24,2006-07-10,TED2006,978,4836214,145000
49,Behind the design of Seattle's library,Joshua Prince-Ramus,2006-02-23,2006-07-10,TED2006,1184,1261975,37000
71,A life of purpose,Rick Warren,2006-02-25,2006-07-18,TED2006,1248,4300620,129000
0

zamiast talk_id powinno byc samo id , powinno to byc BIGINT i powinienes zrobic AUTOINCREMENT. a jaka masz najwyzsza wartosc w tym pliku csv dla pola id?

CREATE TABLE `ted_talks` (
  id int NOT NULL AUTO_INCREMENT,
  title CHAR(100),
speaker CHAR(100),
recorded_date DATE,
published_date DATE,
event CHAR(40),
duration INT,
views INT,
likes INT 
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
1

@chomikowski:

Z tym "autoincremet" przy pierwszym inicjacyjnym imporcie "to zależy" ... w ogóle (potencjalny) import danych w wielu tabelach ze źródła obcego, z zachowaniem relacji to wielki temat, pełen subtelności.
(co nie znaczy, że ten przypadek taki jest - OP nie daje ku temu wskazówek)

Jeśli jest to oderwany import, tak, masz rację, auto i importować bez tego pola

0
chomikowski napisał(a):

zamiast talk_id powinno byc samo id , powinno to byc BIGINT i powinienes zrobic AUTOINCREMENT. a jaka masz najwyzsza wartosc w tym pliku csv dla pola id?

CREATE TABLE `ted_talks` (
  id int NOT NULL AUTO_INCREMENT,
  title CHAR(100),
speaker CHAR(100),
recorded_date DATE,
published_date DATE,
event CHAR(40),
duration INT,
views INT,
likes INT 
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

98843

CREATE TABLE `ted_talks` (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  title CHAR(100),
speaker CHAR(100),
recorded_date DATE,
published_date DATE,
event CHAR(40),
duration INT,
views INT,
likes INT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

MImo poprawienie instrukcji tworzenia tabeli cały czas ten sam błąd:

Error Code: 1265. Data truncated for column 'id' at row 1

4

Dodaj FIELDS TERMINATED BY ','

0
chomikowski napisał(a):

zamiast talk_id powinno byc samo id , powinno to byc BIGINT i powinienes zrobic AUTOINCREMENT. a jaka masz najwyzsza wartosc w tym pliku csv dla pola id?

A ja pozwolę sobie się nie zgodzić.

  1. OP chciał nazwać sobie pole talk_id. W czym przeszkadza Ci nazwa pola?
  2. BIGINT jest dwukrotnie większy od INTa. Jeśli z założenia wartości w tym polu nie przekroczą zakresu obsługiwanego przez zwykłego INTa, to nie ma potrzeby zwiększa rozmiaru pola (nie mówię, że to błąd, ale nie powiedziałbym też, że "powinno")
  3. OP chciał zaimportować z pliku liczbę, a Ty mu każesz ją zignorować i wstawić w jej miejsce autoincrement i stworzyć z niej klucz.

Z tych trzech porad w zasadzie tylko rozszerzenie pola do BIGINTa mogłoby pomóc w rozwiązaniu problemu. Pozostałe dwie są nieadekwatne do opisu problemu.

0
Fac napisał(a):
chomikowski napisał(a):

zamiast talk_id powinno byc samo id , powinno to byc BIGINT i powinienes zrobic AUTOINCREMENT. a jaka masz najwyzsza wartosc w tym pliku csv dla pola id?

A ja pozwolę sobie się nie zgodzić.

  1. OP chciał nazwać sobie pole talk_id. W czym przeszkadza Ci nazwa pola?
  2. BIGINT jest dwukrotnie większy od INTa. Jeśli z założenia wartości w tym polu nie przekroczą zakresu obsługiwanego przez zwykłego INTa, to nie ma potrzeby zwiększa rozmiaru pola (nie mówię, że to błąd, ale nie powiedziałbym też, że "powinno")
  3. OP chciał zaimportować z pliku liczbę, a Ty mu każesz ją zignorować i wstawić w jej miejsce autoincrement i stworzyć z niej klucz.

Z tych trzech porad w zasadzie tylko rozszerzenie pola do BIGINTa mogłoby pomóc w rozwiązaniu problemu. Pozostałe dwie są nieadekwatne do opisu problemu.

Dlatego ze potem masz tabelke w stylu
ted_talks.talk_id co oznacza ze jest to klucz obcy jakiejs tabelki talk.id dlatego stosuje sie samo id zeby wiedziec ze to klucz danej tabeli. Ale rozumiem tych ktorzy nie maja pojecia o czym pisza.

Bigint stosuje sie wlasnie do pola id w tabelach

Nie importuje sie pola ID to chyba jest oczywiste

1 użytkowników online, w tym zalogowanych: 0, gości: 1