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 :

Problème de définition du bon format numérique pour mes données pour import dans une table [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Problème de définition du bon format numérique pour mes données pour import dans une table
    Bonjour
    Je travaille avec phpmyadmin sur mysql sur un projet qui nécessite que j'importe pas loin de 70 000 lignes...
    Je dois importer des valeurs dans une table.
    Dans cette table on trouve
    • des id (pour renvoyer vers différentes valeurs existante dans d'autres tables
    • et des valeurs.



    Ces valeurs sont de chiffres décimaux, avec max 6 nombres avant la virgule, 20 après.

    J'ai essayé plusieurs formats sans arriver à insérer correctement les données.

    Mon dernier essais, c'est DECIMAL(6,20)

    Mais n'importe quel chiffre se transforme en 0.00000000000000

    J'ai une demie douzaine de champs dont les valeurs sont des chiffres décimaux.

    Sauriez vous me dire s'il vous plait quel paramètre je dois appliquer à mes champs pour permettre d'importer correctement mes données?

    Merci pour votre aide.
    ++
    Henri

    Un exemple d'une de mes requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `ddb`.`table001` (`e_date`, `e_mois`, `e_high`, `e_low`, `e_mois_precedent`, `e_duree_initiale`, `e_duree_residuelle`, `e_duree_initiale_moyenne_emission`, `e_partdemarche`, `e_emissions`, `e_tombees`, `e_notation`, `ID_zone`, `ID_ccy`, `ID_eee`, `ID_ins`) VALUES('2006-08-01','110.25','110.25','110.25','110.25','665.619047619048','327.555555555556','','0.00179383767436374','0','0','','1','1','339849507','3');

  2. #2
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut kh4y3m.

    Si tu as 6 chiffres dans la partie entière, et 20 chiffres dans la partie décimal, il y a au total 26 chiffres dans ton nombre.
    La bonne déclaration est de mettre "decimal(26,20) !

    De plus, si tu écris "values ('123456.78945612378945612378')", ce nombre sera considéré comme une chaîne de caractères et non comme une valeur numérique.
    De ce fait, cela te donnera zéro !
    Il ne faut pas mettre d'apostrophe pour encadrer ton nombre : "values (123456.78945612378945612378)"

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Salut,
    et bien merci.
    Ok, ça marche. (26,20)

    En revanche, ta solution soulève un autre problème. J'ai laissé les guillemets, et finalement le résultat semble correcte.

    Est ce que ça veut dire que je ne vais pas pouvoir exploiter les données dans le format dans lesquelles je les vois?

    Non mais au pire je soulèverai un autre poste.

    En tout cas merci pour la réponse, j'ai quelques trucs à tester. Mais j'ai fait un premier test sans les ' et ça marche pas des masses.
    ++
    kh4y3m

  4. #4
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut kh4y3m.

    Citation Envoyé par kh4y3m
    En revanche, ta solution soulève un autre problème.
    Ce n'est pas ma solution. C'est ainsi que fonctionne MySql.
    --> https://dev.mysql.com/doc/refman/5.7...teristics.html

    Citation Envoyé par kh4y3m
    Mon dernier essais, c'est DECIMAL(6,20)
    La mantisse peut aller jusqu'à 65 chiffres. C'est déjà énorme pour ce type numérique.

    Si tu veux plus de précision sur le stockage, tu peux augmenter la partie entière.
    Par exemple, tu veux 10 chiffres dans la partie entière et conserver 20 chiffres par la partie décimal.
    Le nouveau type est alors :
    Citation Envoyé par kh4y3m
    J'ai laissé les guillemets, et finalement le résultat semble correcte.
    Ce ne sont pas des guillemets mais des apostrophes. Tu manipules des nombres et non des chaînes de caractères.
    Si tu mets des guillemets, le contenu sera interprété.
    Tandis qu'avec des apostrophes, le contenu ne sera pas interprété mais pris tel quel !

    Inversement, tu manipules des nombres et de ce fait, ce ne sont pas des chaînes de caractères.
    Il y a sûrement une subtilité qui t'échappe sur cette différence de représentation.
    Si tu mets une chaîne de caractères, MySql va faire une conversion pour rien.
    Donc le mieux est de supprimer ces apostrophes qui ne servent à rien.
    Sinon comment veux-tu faire des calculs si ce nombre n'est pas stocké dans un type numérique ?

    Ensuite, le choix du type est important car cela va conditionner la précision que tu recherches.
    Le type "decimal()" est le bon choix car la précision est conservée ou si tu préfères la précision est exacte.
    Inversement, utiliser "float" ou "double" est une erreur si cela concerne des traitements de gestions.
    Car la précision est approximative et ces types sont utilisés pour le calcul scientifique.
    --> http://dev.mysql.com/doc/refman/5.7/...int-types.html

    Citation Envoyé par kh4y3m
    Est ce que ça veut dire que je ne vais pas pouvoir exploiter les données dans le format dans lesquelles je les vois?
    Il faut faire une distinction entre le stockage de ton information et sa représentation à l'affichage.
    Si tu ne fais pas d'opérations sur cette donnée, cette colonne va restée informationnelle, et sont stockage n'est pas important.
    Par contre, faire des calculs et obtenir la précision que tu recherches implique d'avoir fait le bon choix du type.

    Et pour répondre à ta question, il y a bien une distinction entre le stockage et sa présentation à l'affichage.
    Mais comme tu mélanges ces deux notions, il est difficile de bien répondre à ta question.

    Citation Envoyé par kh4y3m
    Mais j'ai fait un premier test sans les ' et ça marche pas des masses.
    S'il y a un problème, le mieux est d'exposer ton problème afin de trouver la solution la plus adéquate.

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 09/11/2009, 19h56
  2. Réponses: 1
    Dernier message: 04/05/2009, 23h05
  3. Problème importation dans une table via bcp
    Par jesusnavas dans le forum Outils
    Réponses: 2
    Dernier message: 16/04/2008, 15h56
  4. Problème importation dans une table via bcp
    Par jesusnavas dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/04/2008, 15h56
  5. Réponses: 1
    Dernier message: 27/02/2007, 23h08

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