L'instruction MySQL LOAD DATA charge les valeurs du fichier par position , pas de nom.
MySQL n'a aucune exigence concernant les "noms" des champs (à partir de la ligne d'en-tête du fichier .csv) "correspondant" à tous les noms de colonne. (Il est possible qu'un autre composant de votre système ait ce type d'exigence, mais pas MySQL LOAD DATA.)
Il est valide qu'un fichier .csv n'ait pas de ligne d'en-tête. Lorsqu'il y a une ligne d'en-tête, nous la "sautons" généralement en utilisant IGNORE 1 LINES
.
En aparté, je préfère utiliser le mot-clé FIELDS
dans l'instruction LOAD DATA à la place de COLUMNS
.
Dans MySQL, les identifiants (noms de colonnes, noms de tables) peuvent être échappés à l'aide de caractères de backtick. Pour utiliser un identifiant qui comprend des caractères non valides, comme un espace, l'identifiant doit être échappé.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Sur mon clavier, le backtick est la touche en haut à gauche ` ~ juste à gauche du 1 ! clé.
ANSI_QUOTES
Si sql_mode
la variable inclut ANSI_QUOTES
, vous pouvez également utiliser des guillemets doubles pour échapper les identifiants. ex.
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Ensuite :
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Si sql_mode
n'est pas inclure ANSI_QUOTES
(soit explicitement, soit inclus dans un autre paramètre), les guillemets doubles autour des identifiants ne fonctionnent pas. Et l'utilisation de guillemets simples autour des identifiants ne devrait jamais fonctionner... les guillemets simples entourent les littéraux de chaîne.
Le point à retenir :utilisez des caractères de backtick pour échapper les identifiants (noms de colonne, noms de table, etc.) et utilisez des guillemets simples autour des littéraux de chaîne. Évitez d'utiliser des guillemets doubles autour des littéraux de chaîne, pour que votre code SQL fonctionne même lorsque ANSI_QUOTES est défini.