Die MySQL LOAD DATA-Anweisung lädt Werte aus der Datei nach Position , nicht namentlich.
MySQL hat keine Anforderung an die "Namen" der Felder (aus der Kopfzeile in der .csv-Datei), die mit irgendwelchen Spaltennamen "übereinstimmen". (Es ist möglich, dass eine andere Komponente Ihres Systems diese Art von Anforderung hat, MySQL LOAD DATA jedoch nicht.)
Es ist gültig, dass eine .csv-Datei keine Kopfzeile hat. Wenn es eine Kopfzeile gibt, "überspringen" wir sie normalerweise mit IGNORE 1 LINES
.
Nebenbei bevorzuge ich das Schlüsselwort FIELDS
in der LOAD DATA-Anweisung anstelle von COLUMNS
.
In MySQL können Bezeichner (Spaltennamen, Tabellennamen) mit Backtick-Zeichen maskiert werden. Um einen Bezeichner zu verwenden, der ungültige Zeichen wie Leerzeichen enthält, muss der Bezeichner mit Escapezeichen versehen werden.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Auf meiner Tastatur ist der Backtick die Taste oben links ` ~ gleich links neben dem 1 ! Schlüssel.
ANSI_QUOTES
Wenn sql_mode
Variable enthält ANSI_QUOTES
, dann können Sie auch doppelte Anführungszeichen verwenden, um Bezeichner zu maskieren. z. B.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Dann:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Wenn sql_mode
tut nicht schließen Sie ANSI_QUOTES
ein (entweder explizit oder in einer anderen Einstellung enthalten), dann funktionieren die doppelten Anführungszeichen um Bezeichner nicht. Und die Verwendung von einfachen Anführungszeichen um Bezeichner sollte niemals funktionieren ... einfache Anführungszeichen schließen String-Literale ein.
Das Mitnehmen:Verwenden Sie Backtick-Zeichen, um Bezeichner (Spaltennamen, Tabellennamen usw.) mit Escapezeichen zu versehen, und verwenden Sie einfache Anführungszeichen um Zeichenfolgenliterale. Vermeiden Sie doppelte Anführungszeichen um Zeichenfolgenliterale, damit Ihr SQL-Code auch dann funktioniert, wenn ANSI_QUOTES gesetzt ist.