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

Requêtes MySQL Discussion :

le SGBD ne veut pas importer les valeurs NULL


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut le SGBD ne veut pas importer les valeurs NULL
    Salut les cracks

    J'ai voulu importer des données depuis un fichier .csv dans une table, avec dans une colonne certaines valeurs pouvant être NULL (vides dans le fichier csv)

    à la fin de l'import des données, la table ne contient que les lignes où les valeurs sont tout différentes de NULL... Je ne sais pas pourquoi

    la colonne "terrain" semble être le problème

    Voici mon script CREATE et le select * de ma table :

    Nom : table et requête.jpg
Affichages : 142
Taille : 66,6 Ko

    Et pareil pour la colonne "loi carrez" il ne m'a pas rentré les données supérieur à 99 ?!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Comment se fait l'import des données ? Via quelle application ?
    Est-ce que cette application a un fichier de log ?
    Est-ce que tu peux tracer les requêtes lancées sur la base de données ?
    Tu nous dis que la colonne Terrain est vide dans le fichier, mais vide ne signifie pas null. Est-ce que ce "vide" est bien traduit en null ?

    Tatayo.

  3. #3
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Comment se fait l'import des données ? Via quelle application ?
    Est-ce que cette application a un fichier de log ?
    Est-ce que tu peux tracer les requêtes lancées sur la base de données ?
    Tu nous dis que la colonne Terrain est vide dans le fichier, mais vide ne signifie pas null. Est-ce que ce "vide" est bien traduit en null ?

    Tatayo.
    Mysql workbench, clique droit sur la table et "table data import wizard"
    le fichier est un .csv

    tracer une requête je ne sais pas ce que ça veut dire
    si vide est traduit en null, je ne sais pas comment savoir

    J'ai montré tout ce que je peux...

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En fonction du paramétrage du LOAD, le façon d'implémenter les marqueurs NULL est différente
    cf. https://dev.mysql.com/doc/refman/8.0/en/load-data.html

    et notamment cet extrait :
    Pièce jointe 601906

  5. #5
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Ok donc si j'ai bien compris je dois trouver ces foutu réglages de LOAD.

    De plus j'ai aussi remarqué que le logiciel m'a oublié les rows avec:

    -des valeurs >500 pour la surface
    -des valeurs >99 pour loi carrez

    Quand on regarde la table, il m'a sauté des données par poignées de 200 a 500 rows...

  6. #6
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Comment se fait l'import des données ? Via quelle application ?
    Est-ce que cette application a un fichier de log ?
    Est-ce que tu peux tracer les requêtes lancées sur la base de données ?
    Tu nous dis que la colonne Terrain est vide dans le fichier, mais vide ne signifie pas null. Est-ce que ce "vide" est bien traduit en null ?

    Tatayo.
    LE voilà le problème sur le le fichier log :

    ("Incorrect decimal value: '23,4' for column 'loi_carrez' at row 1", 1366)Row import failed with error: ("Incorrect decimal value: '102,4' for column 'loi_carrez' at row 1", 1366)Row import failed with error: ("Incorrect decimal value: '61,96' for column 'loi_carrez' at row 1", 1366) ETC...
    Pourtant dans mon .csv je met bien toute la colonne "loi_carrez" en nombre décimal à 2 chiffres après la virgule. J'ai même fait un CTRL + H sur cette colonne pour mettre tout ce qui était des "." en ","

    Ce qui veut dire qu'il ne devrait plus s'agir de chaîne de caractère. J'ai ensuite enregistré ce fichier .csv puis utiliser ce dernier pour l'importation sur mysql workbench.

    Ce que je constate en re-ouvrant ce .csv, c'est que la colonne "loi_carrez" est de nouveau en "standard" dans le type d'écriture (là où j'avais demandé nombre décimaux)


    Je ne sais pas comment faire (autrement) pour forcer ces données à bien rester décimal pour que l'importation se passe bien en décimal et ne rapporte pas d'erreur comme celles ci.

    Ou peut être suggérez vous que le problème vient d'ailleurs ?
    (je précise également que le fichier est enregistré en csv séparateur virgule)


    Je constate également qu'il ne m'a enregistré que les rows dont les valeurs 'loi carrez" étaient entières et leur a ajouter deux "0" après la virgule :

    Nom : Sans titre.jpg
Affichages : 132
Taille : 12,6 Ko

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Le séparateur décimal est le point et non pas la virgule : 123.45 et non pas 123,45
    Il ne fallait donc pas effectuer ce remplacement des "." par des ","

  8. #8
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Eh bien ceci étant fait avec l'inverse,

    C'est la colonne terrain qu'il ne veut plus remplir (comme au début) à cause de cette histoire de NULL.

    log :
    Row import failed with error: ("Incorrect integer value: '' for column 'terrain' at row 1", 1366)
    Comment on configure pour qu'il accepte une valeur vide en integer et la transforme en NULL ? (sachant que je n'ai pas spécifié NOT NULL dans le paramétrage de cette colonne)


    Sinon quand la colonne est paramétré en char ou varchar y'a pas de souci j'arrive à rentrer mes données, il n'y aura pas NULL par contre (je vais devoir les mettre moi même et ce pour chaque nouvelles lignes également)

    J'ai juste peur que de cette manière je sois gêné à l'avenir si je dois faire des calculs par exemple avec des caractères de type char plutôt que int...

  9. #9
    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 381
    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 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par moonlight09
    J'ai voulu importer des données depuis un fichier .csv dans une table, avec dans une colonne certaines valeurs pouvant être NULL (vides dans le fichier csv)
    Dans les fichiers ".csv", le NULL ne se code pas en mettant vide, mais en mettant le symbole suivant : \N

    Citation Envoyé par moonlight09
    Et pareil pour la colonne "loi carrez" il ne m'a pas rentré les données supérieur à 99 ?!
    Vous devriez augmenter la taille de votre colonne : "decimal(10,2)" par exemple.

    Citation Envoyé par moonlight09
    De plus j'ai aussi remarqué que le logiciel m'a oublié les rows avec:
    Si ces lignes provoquent une erreur, elles ne seront pas chargées.

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.


    Dans les fichiers ".csv", le NULL ne se code pas en mettant vide, mais en mettant le symbole suivant : \N



    @+
    Row import failed with error: ("Incorrect integer value: '\\N' for column 'terrain' at row 1", 1366)

    voilà voilàààààà

    Donc cette colonne integer, j'oublie integer il n'existerait donc aucun moyen de mettre quelque chose dans cette colonne dans le .csv pour qu'il transforme en NULL lors de l'import ?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je pense que les données exportées et importées répondent aux mêmes règles.
    Donc si tu ajoutes une ligne manuellement dans la table, avec un null dans une colonne integer, et que tu lances un export, quelle est la valeur de cette colonne dans le fichier généré ?
    Si tu supprimes la ligne et que tu relances un import, est-ce que ça passe, avec les bonnes données ?

    Tatayo.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    avez-vous vérifié le paramétrage du load comme suggéré dans ma réponse n°4 ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Je pense que les données exportées et importées répondent aux mêmes règles.
    Donc si tu ajoutes une ligne manuellement dans la table, avec un null dans une colonne integer, et que tu lances un export, quelle est la valeur de cette colonne dans le fichier généré ?
    Si tu supprimes la ligne et que tu relances un import, est-ce que ça passe, avec les bonnes données ?

    Tatayo.
    TOP !

    Il fallait donc écrire NULL dans les cellules du .csv

  14. #14
    Membre à l'essai
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    avez-vous vérifié le paramétrage du load comme suggéré dans ma réponse n°4 ?
    J'avais pas encore trop bien compris cette histoire de 'enclosed by' et 'escaped by'

    Fini par trouvé en essayant différentes formes de "enregistrer" sous et différentes façons d'export (suggestion de @tatayo)
    Enfin merci à vous tous

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En ce cas, il faut passer le sujet à "résolu" avec le bouton prévu pour

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/03/2009, 22h52
  2. Ne pas sérializer les valeurs null !
    Par rad_hass dans le forum C#
    Réponses: 16
    Dernier message: 20/02/2009, 21h51
  3. Réponses: 18
    Dernier message: 09/12/2008, 10h40
  4. Ne pas renvoyer les valeurs NULL
    Par David78180 dans le forum SQL
    Réponses: 6
    Dernier message: 07/11/2008, 14h40
  5. [Excel] Ne pas tracer les valeurs nulles d'un graphe
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/02/2006, 19h00

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