De MySQL LOAD DATA-instructie laadt waarden uit het bestand per positie , niet bij naam.
MySQL stelt geen eisen aan de "namen" van de velden (van de kopregel in het .csv-bestand) die "overeenkomen" met kolomnamen. (Het is mogelijk dat een ander onderdeel van uw systeem dat soort vereisten heeft, maar MySQL LOAD DATA niet.)
Het is geldig dat een .csv-bestand geen kopregel heeft. Als er een kopregel is, "slaan we deze over" met IGNORE 1 LINES
.
Terzijde, ik gebruik liever het trefwoord FIELDS
in de LOAD DATA-instructie in plaats van COLUMNS
.
In MySQL kunnen identifiers (kolomnamen, tabelnamen) worden ontsnapt met behulp van backtick-tekens. Om een identifier te gebruiken die ongeldige karakters bevat, zoals een spatie, moet de identifier een escapeteken hebben.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Op mijn toetsenbord is de backtick de toets linksboven ` ~ net links van de 1 ! sleutel.
ANSI_QUOTES
Als sql_mode
variabele bevat ANSI_QUOTES
, dan kunt u ook dubbele aanhalingstekens gebruiken om id's te ontwijken. bijv.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Dan:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Als sql_mode
doet niet inclusief ANSI_QUOTES
(expliciet of opgenomen in een andere instelling), dan werken de dubbele aanhalingstekens rond identiferen niet. En het gebruik van enkele aanhalingstekens rond identifiers zou nooit moeten werken... enkele aanhalingstekens omsluiten letterlijke tekenreeksen.
De afhaalmaaltijd:gebruik backtick-tekens om te ontsnappen aan identifiers (kolomnamen, tabelnamen, enz.) en gebruik enkele aanhalingstekens rond letterlijke tekenreeksen. Vermijd het gebruik van dubbele aanhalingstekens rond letterlijke tekenreeksen, om uw SQL-code te laten werken, zelfs wanneer ANSI_QUOTES is ingesteld.