Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql + importation d'un fichier avec des espaces dans les en-têtes de colonnes + comment gérer

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.