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 :

Problème d'insertion d'un fichier csv dans phpmyadmin mysql


Sujet :

MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 937
    Points : 348
    Points
    348
    Par défaut Problème d'insertion d'un fichier csv dans phpmyadmin mysql
    Bonjour,
    j'ai un soucis d'insertion de données, dans une base phpmyadmin mysql :
    J'ai plusieurs fichiers faisant environ 30 k de lignes.
    J'ai une base de données et une table, avec ma structure contenant 4colonnes (exemple) dont 2 correspondants à des dates.

    voici mes colonnes dans ma base et dans mon fichier excel :
    Employeur - Contrat spécifique - Date début contrat - Date fin contrat

    Chacun des mes fichiers contiennent 4 colonnes, ils sont au format CSV et quand je tente de faire dans phpmyadmin "importer" ça ne fonctionne pas car il y a un problème sur le format date.
    J'ai donc fais des manipulations pour changer le format date de mes fichiers csv, rien y fait il persiste à dire qu'il ne veut pas de mon fichier car il veut des dates au format aaaa-mm-jj

    J'ai essayé d'uitliser mysql workbench pour importer mes fichiers mais il me met des bugs et je perds un temp phénoménale .

    J'ai tenté de mettre mon champ date au format varchar mais ce n'est pas le but recherché car je ne pourrais pas requeter par tranche de date.

    N'existe t-il pas un moyen plus simple d'importer mes fichiers et pour qu'il accepte mes dates qui sont dans mes colonnes de mon fichier csv??

    Merci bien
    Cordialement

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 262
    Points : 8 559
    Points
    8 559
    Billets dans le blog
    17
    Par défaut
    Dans les options d'import, tu précises bien que la 1re ligne du CSV contient le nom des colonnes ?
    Tu précises bien le format du CSV (séparateur & cie) ?

    Pour ta table MySQL, quel est le type de tes colonnes "Date début contrat" et "Date fin contrat" ?

    Dans ton CSV, quel est le format des valeurs de ces colonnes ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 386
    Points : 39 884
    Points
    39 884
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Un diagnostic n'est possible qu'avec des éléments de contexte précis, à savoir :

    • le script DDL de création de la table (ordre create table) ;
    • un extrait du contenu du fichier, en particulier avec l'une des lignes qui tombent en erreur ;
    • les paramètres choisis pour réaliser l'import ;
    • le message d'erreur exact et complet.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 937
    Points : 348
    Points
    348
    Par défaut
    Bonjour

    dans mysql, mes champs dates sont au format DATE ( donc en tout logique comme c'est le format us, ça doit etre enregistré au format aaaa-mm-jj ??) et dans mon fichier CSV, mes champs dates sont au format normal jj/mm/aaaa.

    J'ai essayé beaucoup de chose, j'ai été dans format de cellule puis j'ai mis au format aaaa-mm-dd mais ça ne fonctionne pas.

    Le probleme avec les fichiers csv .... c'est que j'ai beau mettre au format aaaa-mm-jj, quand j'importe mon fichier dans phpmyadmin, il me dit :

    #1292 - Incorrect date value: '' for column ...

    2ème test:
    après avoir mis mes colonnes au format aaa-mm-jj, j'ai fais une nouvelle colonne puis j'ai mis celle formule : =TEXTE(C1, "aaaa-mm-jj"), puis je dois faire un copier et coller les valeurs,mais cette option n'est pas envisageable, car j'ai beaucoup de colonne et beaucoup de fichier à importer, sans garantie du résultat


    Pour répondre à vos question :
    oui je précise bien tout ce qu'il faut, je dis que le séparateur est bien le ; .
    J'ai également pensé à une chose pour plus de faciliter, supprimer l'entete de mes fichiers car ma structure de ma table mysql est là, il me faut juste importer mes données.

    J'avais réalisé mes imports mais mes dates étaient au format texte et comme je dois requeter par date j'ai laché l'affaire
    Pour cela, j'avais créé un fichier test, avec 10/15 lignes, mes imports étaient ok, du coup j'ai balancé mes fichiers de 30k de ligne chacun mais j'ai vite réalisé que c'était une perte de temps car mes champs dates doivent être au bon format.

    Pour résumé :
    il tombe en erreur dès la 1ere ligne car ce sont les champs dates qui posent problème et pour mon plus grand malheure, les fichiers CSV ne conservent pas le formatage, j'ai beau mettre le bon format, je le réouvre il redevient normal.
    Si on pouvait importé des fichiers excel dans phpmyadmin ça serait génial mais on peut pas

    Merci beaucoup

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 937
    Points : 348
    Points
    348
    Par défaut
    J'ai essayé une autre façon de faire :

    convertir la date dans mon fichier excel au format aaaa-mm-jj puis l'enregistrer au format csv, impossible il me le remet au format normal

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 491
    Points
    28 491
    Par défaut
    Citation Envoyé par android59 Voir le message
    les fichiers CSV ne conservent pas le formatage, j'ai beau mettre le bon format, je le réouvre il redevient normal.
    Les fichiers CSV sont des fichiers de texte, il n'y a pas de raison qu'en les ouvrant avec un éditeur de texte leur contenu change.
    En revanche, si tu les ouvre avec Excel ou tout autre tableur celui-ci va les mettre en forme à l'affichage.

    Il faut donc que tu t'assures du contenu réel de tes fichiers CSV en les ouvrant avec un éditeur de texte avant de chercher à les importer.

    Si réellement, il t'est impossible de formater le contenu de ton ficher CSV tel qu'attendu dans PhpMyAdmin, il reste la solution d'importer le fichier dans une table de travail dans lequel les colonnes de date seront de type CHAR(10) puis convertir cette chaine en date lors de la mise à jour de table finale.

    C'est d'ailleurs une bonne pratique de ne pas importer directement les données en base mais de passer par une table de travail, ce qui permet de vérifier la validité des données, éventuellement effectuer la normalisation de informations (liens vers des tables de références par exemple) plutôt que de risquer de mettre en cause toute la validité de la base lors de la réception d'un fichier mal formaté ou erroné.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 585
    Points : 19 774
    Points
    19 774
    Par défaut
    Salut à tous.

    Lire la documentation est un prérequis quand on ne sait pas trop comment faire, surtout pour ce qui est des conversions de date.
    Si j'ai bien compris votre problème, dans le fichier CSV à charger dans une table, vous avez une date au format "JJ/MM/AAAA" et dans votre table, elle est au format "AAAA-MM-JJ". Rien de plus facile, il suffit juste de la convertir au moment du chargement.

    Voici un extrait du fichier "CSV" à charger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    \N;"10/5/2014 15:33:17";"web"
    125;"15/5/2014 23:53:59";"alpha\; beta\; gamma"
    -247;\N;"zéro"
    La date dans cet exemple est au format "/JJ/MM/AAAA HH:MM:SS".

    Voici le script MySql qui va permettre le chargement du fichier CSV dans la table "trav" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    START TRANSACTION;
     
    -- ==========
    -- Paramètres
    -- ==========
     
    SHOW VARIABLES LIKE 'secure_file_priv';
     
    -- ======================
    -- Base de Données `Base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE IF NOT EXISTS `base`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `base`;
     
    -- ============
    -- Table `trav`
    -- ============
     
    DROP TABLE IF EXISTS trav;
     
    CREATE TABLE `trav`
    ( `id`        integer unsigned  not null auto_increment primary key,
      `col_num`   integer               null default null,
      `col_date`  datetime              null default null,
      `col_char`  varchar(255)          null default null,
      `col_vide`  varchar(255)          null default null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =============================
    -- Chargement de la table `trav`
    -- =============================
     
    LOAD DATA LOCAL INFILE 'fichier.txt'
         INTO TABLE `trav`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY ';'
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 0 LINES
         (@F1, @F2, @F3)
         set col_num  =             trim(@F1),
             col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'),
             col_char =             trim(@F3),
             col_vide = '...';
     
    -- =========================
    -- Vidage de la table `trav`
    -- =========================
     
    select * from `trav`;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    EXIT
    Et voici son exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    --------------
    START TRANSACTION
    --------------
     
    --------------
    -- ==========
    --------------
     
    --------------
    -- Paramètres
    --------------
     
    --------------
    -- ==========
    --------------
     
    --------------
    SHOW VARIABLES LIKE 'secure_file_priv'
    --------------
     
    +------------------+--------------+
    | Variable_name    | Value        |
    +------------------+--------------+
    | secure_file_priv | E:\30.MySql\ |
    +------------------+--------------+
    --------------
    -- ======================
    --------------
     
    --------------
    -- Base de Données `Base`
    --------------
     
    --------------
    -- ======================
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    -- ============
    --------------
     
    --------------
    -- Table `trav`
    --------------
     
    --------------
    -- ============
    --------------
     
    --------------
    DROP TABLE IF EXISTS trav
    --------------
     
    --------------
    CREATE TABLE `trav`
    ( `id`        integer unsigned  not null auto_increment primary key,
      `col_num`   integer               null default null,
      `col_date`  datetime              null default null,
      `col_char`  varchar(255)          null default null,
      `col_vide`  varchar(255)          null default null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    -- =============================
    --------------
     
    --------------
    -- Chargement de la table `trav`
    --------------
     
    --------------
    -- =============================
    --------------
     
    --------------
    LOAD DATA LOCAL INFILE 'fichier.txt'
         INTO TABLE `trav`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY ';'
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 0 LINES
         (@F1, @F2, @F3)
         set col_num  =             trim(@F1),
             col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'),
             col_char =             trim(@F3),
             col_vide = '...'
    --------------
     
    --------------
    -- =========================
    --------------
     
    --------------
    -- Vidage de la table `trav`
    --------------
     
    --------------
    -- =========================
    --------------
     
    --------------
    select * from `trav`
    --------------
     
    +----+---------+---------------------+--------------------+----------+
    | id | col_num | col_date            | col_char           | col_vide |
    +----+---------+---------------------+--------------------+----------+
    |  1 |    NULL | 2014-05-10 15:33:17 | web                | ...      |
    |  2 |     125 | 2014-05-15 23:53:59 | alpha; beta; gamma | ...      |
    |  3 |    -247 | NULL                | zéro               | ...      |
    +----+---------+---------------------+--------------------+----------+
    --------------
    -- ===
    --------------
     
    --------------
    -- Fin
    --------------
     
    --------------
    -- ===
    --------------
     
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Le vidage de la table "trav" montre que la date a bien été converti au format désiré.
    Reprenez cet exemple et adaptez le à vos contraintes que vous ne nous avez pas fourni comme demandez par Escartefigue.

    Cordialement.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 22
    Dernier message: 20/07/2010, 16h43
  2. [XL-2003] Insertion d'un fichier csv dans une feuille xls
    Par giom182 dans le forum Excel
    Réponses: 10
    Dernier message: 20/07/2009, 19h52
  3. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 12h59
  4. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 13h35
  5. Insertion d'un fichier texte dans une moulinette PL/SQL
    Par Douanier007 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 24/01/2005, 17h08

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