[MySQL] Modif dans la gestion du type float ?

ViPHP
pjl
ViPHP | 2119 Messages

12 févr. 2008, 00:10

J'ai d'un coté MySQL 5.0.22 - phpMyAdmin 2.9.1.1, la base 1,
de l'autre MySQL 5.0.27 - phpMyAdmin 2.9.0.3, la base 2.
J'ai une table qui a exactement la même structure de chaque coté :
id_part tinyint(4)
id_produit tinyint(4)
quantite float(4,2).

Dans la base 1, je peux écrire en quantité 1000, ca ne pose pas de problème. J'ai bien dans ma table 1000,00
Dans la base 2, lorsque je veux saisir 1000, ca me donne dans ma table 99,99. Il faut que je passe en float(6,2) pour pouvoir stocker 1000.
Avez-vous une idée du problème ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 00:16

Alors, pour commencer, il me semble que float(4,2) signifie 4 chiffre affiché dont 2 chiffres après la virgule, soit la valeur maximale 99,99. A confirmer.

Sinon, pour expliquer l'affichage de 1000 dans l'une des 2, serait-ce une phénomène d'arrondi ? Il m'est déjà arrivé d'avoir un arrondi via phpMyAdmin.
Essaye d'afficher le contenu de tes champs directement via la console MySQL, puis depuis un script PHP
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 févr. 2008, 00:41

Ça doit être lié au sql_mode. Essaie un

Code : Tout sélectionner

SELECT @@sql_mode
...sur chacun des serveurs. Je me rappelle que les anciennes versions de MySQL ne suivaient pas les standards et que ça a été corrigé par la suite, selon le sql_mode en cours si mes souvenirs sont bons.

Sinon, essaie de faire une copie de ta table par phpMyAdmin et refais tes tests. Il y a certains détails dont je ne me souviens plus très bien, liés à la version de MySQL sur laquelle la table a été créée.

ViPHP
pjl
ViPHP | 2119 Messages

12 févr. 2008, 00:49

J'ai fait les tests dont tu parles plus un.
J'ai voulu modifier une des valeur dans la base n°1, celle d'origine et je me retrouve avec 99,99.

Je crois que le problème est lié à la version d'origine de la base de données.
La base d'origine date d'octobre 2004, ce devait être MySQL 4 voire 3, je ne sais plus.
Comme le PC avait pas mal souffert, j'ai du passer en force d'easyPHP 1.4 ou 1.7 à la version 2.0 en faisant un copier/coller du répertoire ou il y a les données mySQL pour essayer de récupérer cette base de données.
Je pense qu'il doit y avoir une différence dans la facon dont MySQL gère ses floats.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 févr. 2008, 00:53

T'as dû poster pendant que j'éditais :P Essaie de faire une copie de ta table par phpMyAdmin et refais tes tests. De cette façon, la "nouvelle" table sera au bon format.

Tu peux faire un SHOW TABLE STATUS pour voir la version de MyISAM de tes tables.

ViPHP
ViPHP | 5924 Messages

12 févr. 2008, 02:13


ViPHP
pjl
ViPHP | 2119 Messages

25 févr. 2008, 03:04

Effectivement, la différence est à partir de la version 3.23 de MySQL.
Je devais vraiment avoir une vieille version de MySQL.
Heureusement que ce n'était pas une BDD pour gérer une centrale nucléaire.
Essaie de faire une copie de ta table par phpMyAdmin et refais tes tests. De cette façon, la "nouvelle" table sera au bon format.
Là, c'est plus un problème de données finalement que de format.
Le format se corrige en 2s, pas les données qui ont été altérées.
Dans mon cas, ca n'a pas été trop grave.
J'ai corrigé le format et j'ai simplement réinséré les données des 2 tables qui posaient problèmes.

L'application mise à jour vit une 2eme vie.