Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2011, 13h20   #1
Invité de passage
 
Guigui Boulate
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : Guigui Boulate

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Par défaut L'enfer des décimales.

Bonjour à tous.

J'ai mis en place une base de donnée dans laquelle je dois intégrer des nombres à virgules TRÈS flottantes (Ça va de 100 000 à 0,0000000000001).
J'ai donc créé une table avec mes colonnes de données en "Decimal" (ce sont les champs 3 et 4 qui nous intéressent):
  • create table MaTable (Champ1 char(8), Champ2 int(3), Champ3 decimal(20,14), Champ4 decimal(20,14))

Problème: les données que j'importe (depuis un .csv) sont tronquées au niveau de la virgule. Que l'import soit fait via mysql-import ou via phpmyadmin.

Exemple, si un ligne de "Champ3" doit être à 0.05, elle sera à 0.

J'ai tenté le float, même problème.
J'ai tenté le double, même problème.

Le seul moyen d'obtenir mes données correctement est de les passer en char.
Problème: Impossible de calculer quoi que ce soit par la suite. J'ai bien 0.05 d'affiché, mais si je fais un "select (champ3 * 200) from MaTable Where condition", il me retourne 0.

Comment faire pour que TOUT mon champ soit affiché? Est ce un problème d'import ? De format de colonne ? De table ?
Je suis un peu perdu
boulate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h33   #2
Invité de passage
 
Guigui Boulate
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : Guigui Boulate

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Je viens de tester deux ou trois choses.
J'ai mis mes champs en decimal(62,30) (j'ai mis au max ... pour voir ce que ca donnait).

L'import pose toujours probleme, quand une décimale est présente, il tronque.

Par contre, quand j'insère, ca donne ca:

insert into MaTable values ("TEST", 106, 0.00005, 0.5) => ca marche

insert into MaTable values ("TEST", 106, 0.000005, 0.5) => le champ3 passe à 0. Dès que je mets plus de 5 décimales, il me perd ma valeur.

Pareil si je rentre la valeur 5E-5, ca passe.
5E-6 devient 0.
boulate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h36   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
Dans les données à importer, le séparateur décimal est bien un point, pas une virgule ?

Si tu peux les importer en VARCHAR, fais le dans une table provisoire puis exporte les données de cette table provisoire vers la vraie table en les convertissant ensuite avec CAST.
Code :
CAST(colonne_origine AS DECIMAL(20,14))
EDIT
Je viens de tester en créant une colonne de type DECIMAL(20,14) sur une de mes tables de test et en insérant la valeur 0.000000005, phpMyAdmin affiche 0.00000000500000 ce qui est correct. Par contre, en insérant 0,000000005, il m'informe que la valeur est tronquée et effectivement il affiche 0.00000000000000, probablement à cause du séparateur décimal qui est une virgule, ce qui n'est pas bon car interprété comme un séparateur d'éléments en SQL.

J'ai même carrément pris ta requête de création de table et ta seconde requête d'insertion et j'ai bien les bonnes données insérées.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h44   #4
Invité de passage
 
Guigui Boulate
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : Guigui Boulate

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Bonjour CinePhil, et merci pour cette réponse!

Le séparateur est bien un point, oui

Je vais tester le cast, merci pour l'idée.

Ce qui est bizarre, c'est que même un insert se passe mal (au delà de 5 chiffres après la virgule, il passe à 0).

Que ce soit en float ou en decimal.
boulate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h47   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
J'ai édité mon message :
Citation:
J'ai même carrément pris ta requête de création de table et ta seconde requête d'insertion et j'ai bien les bonnes données insérées.
Chez moi ça fonctionne normalement.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h03   #6
Invité de passage
 
Guigui Boulate
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : Guigui Boulate

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Mon probleme d'import semble reglé (j'avais une virgule mal placée en début de fichier en effet).

Par contre, toujours le même probleme pour les petits chiffres.
Quand plus de 5 chiffres derrière la virgule, il arrondi à zéro

Exemple:
insert into MaTable (Champ1, Champ2, Champ3, Champ4, Champ5, Champ6, Champ7, Champ8, Champ9) values ("TEST2", 106, 0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005)

Résultat:
TEST2 106 0.5 0.05 0.005 0.0005 0.00005 0 0

Mes colonnes sont toutes en decimal(20,14)
Sauf les deux premières bien entendu.
boulate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h09   #7
Invité de passage
 
Guigui Boulate
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : Guigui Boulate

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Ok ... je viens de comprendre!

C'est en fait Squirrel qui m'affiche mal mes lignes.

Je viens de regarder sous phpmyadmin, j'ai bien mes données correctes.

Je viens de me casser la tête une demi journée sur un problème qui n'existe pas... ca m'énerve.

Deux bugs que je décèle dans Squirrel en une journée, ca commence à faire un peu trop (mais je veux rester sur du client libre...)

Merci encore pour ton aide CinePhil !
boulate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h46   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
Ton Squirrel a peut-être le même comportement que celui de Tex Avery ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h48.


 
 
 
 
Partenaires

Hébergement Web