|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Guigui Boulate Inscription : octobre 2009 Messages : 5 ![]() |
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):
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 |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Guigui Boulate Inscription : octobre 2009 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#3 |
![]() ![]() |
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)) 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 ! |
|
00
|
|
|
#4 |
|
Invité de passage
![]() Guigui Boulate Inscription : octobre 2009 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#5 | |
![]() ![]() |
J'ai édité mon message :
Citation:
__________________
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 ! |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Guigui Boulate Inscription : octobre 2009 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Guigui Boulate Inscription : octobre 2009 Messages : 5 ![]() |
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 ! |
|
|
00
|
|
|
#8 |
![]() ![]() |
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 ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com