L'istruzione MySQL LOAD DATA carica i valori dal file per posizione , non per nome.
MySQL non ha alcun requisito sui "nomi" dei campi (dalla riga di intestazione nel file .csv) che "corrispondano" a qualsiasi nome di colonna. (È possibile che qualche altro componente del tuo sistema abbia quel tipo di requisito, ma MySQL LOAD DATA no.)
È valido per un file .csv non avere una riga di intestazione. Quando c'è una riga di intestazione, in genere la "salta" usando IGNORE 1 LINES
.
Per inciso, preferisco usare la parola chiave FIELDS
nell'istruzione LOAD DATA al posto di COLUMNS
.
In MySQL, è possibile eseguire l'escape degli identificatori (nomi di colonna, nomi di tabelle) utilizzando i caratteri backtick. Per utilizzare un identificatore che includa caratteri non validi, come uno spazio, l'identificatore deve essere sottoposto a escape.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Sulla mia tastiera, il backtick è il tasto in alto a sinistra ` ~ appena a sinistra di 1 ! chiave.
ANSI_QUOTES
Se sql_mode
la variabile include ANSI_QUOTES
, puoi anche usare le virgolette doppie per sfuggire agli identificatori. es.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Quindi:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Se sql_mode
non includi ANSI_QUOTES
(in modo esplicito o incluso in qualche altra impostazione), le virgolette intorno agli identificatori non funzionano. E l'utilizzo di virgolette singole attorno agli identificatori non dovrebbe mai funzionare... le virgolette singole racchiudono le stringhe letterali.
Il takeaway:usa i caratteri backtick per sfuggire agli identificatori (nomi di colonne, nomi di tabelle, ecc.) E usa virgolette singole attorno alle stringhe letterali. Evita di usare le virgolette tra le stringhe letterali, per far funzionare il tuo codice SQL anche quando ANSI_QUOTES è impostato.