MySQL LOAD DATA-sætningen indlæser værdier fra filen efter position , ikke ved navn.
MySQL har ingen krav om, at felternes "navne" (fra overskriften i .csv-filen) "matcher" eventuelle kolonnenavne. (Det er muligt, at en anden komponent i dit system har den type krav, men det gør MySQL LOAD DATA ikke.)
Det er gyldigt, at en .csv-fil ikke har en overskriftslinje. Når der er en overskriftslinje, "springer vi over" den ved at bruge IGNORE 1 LINES
.
Som en sidebemærkning foretrækker jeg at bruge søgeordet FIELDS
i LOAD DATA-sætningen i stedet for COLUMNS
.
I MySQL kan identifikatorer (kolonnenavne, tabelnavne) escapes ved at bruge backtick-tegn. For at bruge en identifikator, der indeholder ugyldige tegn, f.eks. et mellemrum, skal identifikatoren escapes.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
På mit tastatur er backtikken tasten øverst til venstre ` ~ lige til venstre for 1 ! nøgle.
ANSI_QUOTES
Hvis sql_mode
variabel inkluderer ANSI_QUOTES
, så kan du også bruge dobbelte anførselstegn for at undslippe identifikatorer. f.eks.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Så:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Hvis sql_mode
gør ikke inkludere ANSI_QUOTES
(enten eksplicit eller inkluderet i en anden indstilling), så virker de dobbelte anførselstegn omkring identifikatorer ikke. Og brug af enkelte anførselstegn omkring identifikatorer burde aldrig fungere... enkelte anførselstegn omslutter strenge bogstaver.
Takeaway:Brug backtick-tegn for at undslippe identifikatorer (kolonnenavne, tabelnavne osv.) og brug enkelte anførselstegn omkring strenge bogstaver. Undgå at bruge dobbelte anførselstegn omkring strenge bogstaver for at få din SQL-kode til at fungere, selv når ANSI_QUOTES er indstillet.