IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Envoyer un CSV sur BDD mais avec colonnes accentuées et contenant des espaces :/


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Pub
    Inscrit en
    Octobre 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Pub
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Envoyer un CSV sur BDD mais avec colonnes accentuées et contenant des espaces :/
    Bonjour,
    J'ai un script qui envoie régulièrement (quand un fichier .csv a été téléchargé dans le dossier) le contenu CSV dans la base de données.

    Précédemment, pour importer le fichier, le script était écrit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = 'LOAD DATA LOCAL INFILE "inscrits.csv" 
            INTO TABLE inscrits_csv 
    		CHARACTER SET UTF8
            FIELDS TERMINATED BY ";" 
            OPTIONALLY ENCLOSED BY """" 
            IGNORE 1 LINES
            (col1, col2, col3, col4, col5)';
    Le fichier contient pas moins de 40 colonnes mais seules les 5 premières nous intéressaient.

    Début de semaine, le gérant de l'application annonce une nouvelle version des fichiers et ceux-ci contiennent des colonnes telles que "Prénom" ou "Image de profil".
    Maintenant, le fichier est sous cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID;Relation ID invoicing;Nom;Prénom;Mobile;Adresse;Sexe;Date de naissance;Image de profil;
    Hors, nous aimerions récupérer les données de ID, Nom, Prénom, Date de Naissance et Image de profil.

    Comment modifier la requête pour que ID soit mis en colonne1, Nom en colonne2, Date de Naissance en colonne 3, Image de Profil en colonne4, Mobile en colonne5 (ce qui était le cas avant), vu les espaces et accents apparus dans les titres de colonne ?
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET col1=Nom, col2=Prénom
    mais bien sur, erreur. Même avec les noms de colonnes entourées de '' ou "" ...

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    Les accents ne devraient pas gêner si le codage est bon de part et d'autre.

    Pour que les colonnes soient alignées, il faut partir du principe que ton LOAD DATA doit positionner correctement les colonnes du fichier.

    Fichier :

    ID;Relation ID invoicing;Nom;Prénom;Mobile;Adresse;Sexe;Date de naissance;Image de profil;
    Ta demande :

    ID soit mis en colonne1, Nom en colonne2, Date de Naissance en colonne 3, Image de Profil en colonne4, Mobile en colonne5
    Requête :

    LOAD DATA ...
    ...
    IGNORE 1 LINES
    (col1, @rel_id_invoicing, col2, @prenom, col5, @adresse, @sexe, col3, col4)
    Les @var peuvent être utilisées pour du préprocessing, si pas de préprocessing elles seront ignorées.

    https://dev.mysql.com/doc/refman/8.4...-preprocessing



    Attention, les chaînes sont délimitées avec ' plutôt que "
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre à l'essai
    Homme Profil pro
    Pub
    Inscrit en
    Octobre 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Pub
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    J'ai réussi partiellement mais après, et je n'ai pas tout donné, il y a des champs "E-mail"... et cela bloque au caractère -

    J'ai remplacé tous les accents par une lettre non accentuée : cela a fonctionné.
    J'ai remplacé les espaces dans les noms de colonne par un _ : pas de soucis.

    Une fois que le script rencontre une colonne avec un trait d'union, cela coince.
    Et j'ai aussi un champs avec un nom "Relation ID invoicing (Export / Octopus)"...

    Bref, je ne sais pas si c'est une bonne méthode, mais j'ai remplacé les caractères ( / - ) qui génèrent des erreurs par un "_", préférant cela au "@dummy" et cela fonctionne.
    En espérant qu'ils ne modifieront plus la structure du fichier, car de 7 colonnes, on est passé à plus de 40...

    Merci de l'aide.

Discussions similaires

  1. Envoie d'email avec une pièce jointe contenant des espaces
    Par Avinetor dans le forum Général Python
    Réponses: 2
    Dernier message: 25/08/2020, 11h21
  2. [DATA] Renommer colonne en nom contenant des espaces
    Par Oreo_ dans le forum SAS Base
    Réponses: 8
    Dernier message: 16/05/2013, 15h57
  3. Réponses: 2
    Dernier message: 20/04/2011, 11h57
  4. Réponses: 2
    Dernier message: 08/05/2008, 12h36
  5. Group by sur Produit mais avec date qui se suivent
    Par suantay dans le forum Langage SQL
    Réponses: 9
    Dernier message: 29/02/2008, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo