Mysql
 sql >> Database >  >> RDS >> Mysql

mysql + importazione di un file con spazi nelle intestazioni delle colonne + come gestirlo

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.