Quel type MySQL pour des données décimales ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par milkiway, 17 Février 2010.

  1. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    Bonjour 8O

    J'ai créé une grosse base de données sur Excel. Je l'ai enregistrée en CSV pour l'importer dans phpmyadmin pour en faire une base MySQL.

    Le gros souci est que toutes mes valeurs décimales sont... transformées en valeur entières.
    12.4 donne 12
    15.57 donne 16

    En fait, tout ce qui est après la virgule est zappé et le chiffre est arrondi.
    Je pense que mon choix de format de "cellule" est en cause.
    Mes cases sont désignées comme INT mais visiblement ça ne convient pas, que faut il choisir ?
    A moins que ça ne puisse venir d'ailleurs ?

    Merci
     
  2. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 740
    J'aime reçus:
    1
  3. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    Ca fonctionne parfaitement, merci blman.
     
  4. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 740
    J'aime reçus:
    1
    De rien ;)

    Juste pour les float, assure toi que dans tes fichiers, le séparateur des décimales soit bien un point ( ex : 2.5) et pas une virgule (2,5). De mémoire, ça merde à l'import dans MySQL. Evite aussi les formats anglais (ex : 1 236.20) et autres formulations (1.236,20).

    Vu que je passe pas mal de temps à parser des fichiers de prix qui viennent de différentes sources, d'expérience, je te conseil :
    - soit de tester le format de ces chiffres avant l'injection dans la BDD (en PHP ou dans le langage de script que tu utilise)
    - soit de bien normaliser les chiffres dans un tableur du style open office.

    Si tu ne fais que cet import là et que tu n'a pas trop de mise à jour régulières à faire, oubli ce que je viens d'écrire.
     
  5. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Attention, les nombres flottants ont des effets pervers (liés au stockage en base 2 alors que nous travaillons en base 10). Si tu dois absolument conserver ta valeur exactement telle quelle (et pas à peu près pareille), et que le nombre de décimales est constant (par exemple des prix avec toujours 2 décimales), il vaut mieux stocker ça sous forme d'entiers (après avoir multiplié ça par 100 dans l'exemple donné).

    Sinon tu risques d'avoir des surprises, en particulier si après tu fais des opérations, même simples, sur ces nombres.

    Jacques.
     
  6. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    Ah bon mais quel genre de surprises?et stocker sous forme de texte?
     
  7. Seb's
    Seb's WRInaute discret
    Inscrit:
    15 Avril 2008
    Messages:
    193
    J'aime reçus:
    0
    Je pense que les surprises sont sur des précisions d'opérations arithmétiques.

    Par exemple, en float, double, etc., on peut se retrouver avec l'opération 10 / 2 * 2 = 9.99999.

    C'est pour ce genre de cas que les langages ont introduit des types décimaux, destinés à la base 10 spécifiquement.
    Le stockage en entier est une solution, mais implique des opérations fréquentes (multiplication et division avant stockage et après récupération) qui au final s'avèrent coûteuses.

    Personnellement, j'utilise le type DECIMAL (DECIMAL(30, 15), par exemple). Il me semble qu'il mange un peu en place dans la BD, mais est fait pour ce genre de cas, non ?
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Ben le truc c'est qu'il n'y a pas que la bdd qui pose problème, et comme la plupart des langages n'ont que les types entier ou flottant quand il s'agit de faire des calculs (et donc un "decimal" SQL sera converti en flottant en C, perl, php, JS, etc.), il vaut mieux qu'ils restent sous forme d'entiers en permanence. Effectivement ça oblige à faire une multiplication à la saisie et une division à l'affichage, mais tous le reste du temps tu le laisses en l'état (en gros, si tu manipules des montants en euros par exemple, tu les convertis illico en centimes, et tu les traites uniquement comme ça, sauf à l'affichage).

    Jacques.
     
  9. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    En même temps je ne stocke que des données simples sur lesquelles je ne fais pas de traitement particulier.
    Par exemple une consommation (5.8l/100km) ou un chrono 0 à 100 en 28.3 que je convertis en 28s3 (je remplace le point par un "s").

    Merci pour les réponses en tout cas.
     
  10. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 740
    J'aime reçus:
    1
    Merci jacques pour ce petit cours, je viens d'apprendre quelquechose là.
     
  11. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Effectivement vu ton application ce n'est pas très important. Là où c'est vraiment gênant c'est quand on essaie de stocker des montants, et qu'on finit par se retrouver avec des centimes en plus ou en moins quand on additionne ou soustrait plusieurs nombres.

    Jacques.
     
Chargement...
Similar Threads - type MySQL données Forum Date
Lier facilement un fichier local type Excel et une base mysql Développement d'un site Web ou d'une appli mobile 11 Août 2009
quel type de champs mysql pour une variable type file ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2009
Search Console Type de redirection pour un changement de domaine Noms de domaine et référencement 24 Octobre 2019
Quel type de logiciel utiliser pour créer un site web simple et performant ? Demandes d'avis et de conseils sur vos sites 14 Octobre 2019
WordPress Annuaire avec fiche d'inscription différente par type d'inscrits Développement d'un site Web ou d'une appli mobile 7 Octobre 2019
Cloacking type pharama hack Problèmes de référencement spécifiques à vos sites 5 Juin 2019
sitemap par type de page et par langue Référencement international (langues, pays) 28 Mai 2019
Stratégie de référencement site ecommerce avec un seul type de produits Débuter en référencement 7 Février 2019
WordPress Tester si le post type est dans la taxonomie X Développement d'un site Web ou d'une appli mobile 28 Janvier 2019
Attaque de type DDOS UDP sur un serveur VPS Administration d'un site Web 27 Novembre 2018
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice