Instrukcja MySQL LOAD DATA ładuje wartości z pliku według pozycji , a nie z nazwy.
MySQL nie ma żadnych wymagań dotyczących „nazw” pól (z wiersza nagłówka w pliku .csv) „pasujących” do nazw kolumn. (Możliwe, że jakiś inny komponent twojego systemu ma tego typu wymagania, ale MySQL LOAD DATA nie.)
Plik .csv może nie mieć wiersza nagłówka. Gdy istnieje wiersz nagłówka, zwykle „przeskakujemy” go, używając IGNORE 1 LINES
.
Na marginesie wolę używać słowa kluczowego FIELDS
w instrukcji LOAD DATA w miejsce COLUMNS
.
W MySQL identyfikatory (nazwy kolumn, nazwy tabel) mogą być zmieniane za pomocą znaków backtick. Aby użyć identyfikatora, który zawiera nieprawidłowe znaki, takie jak spacja, identyfikator musi zostać zmieniony.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Na mojej klawiaturze znak zaznaczenia to klawisz w lewym górnym rogu ` ~ tuż na lewo od 1 ! klawisz.
ANSI_QUOTES
Jeśli sql_mode
zmienna zawiera ANSI_QUOTES
, możesz także użyć podwójnych cudzysłowów do ucieczki identyfikatorów. np.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Następnie:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Jeśli sql_mode
czy nie uwzględnij ANSI_QUOTES
(jako jawnie lub w innym ustawieniu), wtedy podwójne cudzysłowy wokół identyfikatorów nie działają. A używanie pojedynczych cudzysłowów wokół identyfikatorów nigdy nie powinno działać... pojedyncze cudzysłowy zawierają literały ciągu.
Na wynos:użyj znaków backtick, aby uciec przed identyfikatorami (nazwy kolumn, nazwy tabel itp.) i użyj pojedynczych cudzysłowów wokół literałów ciągu. Unikaj używania podwójnych cudzysłowów wokół literałów łańcuchowych, aby Twój kod SQL działał nawet wtedy, gdy ustawiono ANSI_QUOTES.