221 votes

Meilleur type de données pour le stockage des valeurs monétaires dans une base de données MySQL

Quel est le meilleur type de données SQL pour les valeurs monétaires ? J'utilise MySQL mais je préférerais un type indépendant de la base de données.

2 votes

238voto

Kibbee Points 36474

Quelque chose comme Decimal(19,4) fonctionne généralement très bien dans la plupart des cas. Vous pouvez ajuster l'échelle et la précision pour répondre aux besoins des chiffres que vous devez stocker. Même dans SQL Server, j'ai tendance à ne pas utiliser " money "car il n'est pas standard.

55 votes

Un point sur la taille : selon MSDN ( msdn.microsoft.com/fr/us/library/ms187746.aspx ), Decimal(10,4) et Decimal(19,4) utilisent tous les deux 9 octets de stockage, alors autant profiter de ces 9 chiffres d'échelle supplémentaires.

1 votes

L'article MSDN concerne SQL Server mais la question porte sur MySQL. (J'ai rencontré des développeurs qui pensent que les deux sont les mêmes, alors mieux vaut être clair).

6 votes

Quel est l'avantage d'utiliser (19,4) au lieu de (19,2) ?

49voto

SeanJA Points 4150

La seule chose à laquelle vous devez faire attention est que si vous migrez d'une base de données à une autre, vous pouvez constater que DECIMAL(19,4) et DECIMAL(19,4) ont des significations différentes.

( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )

    DBASE: 10,5 (10 integer, 5 decimal)
    MYSQL: 15,5 (15 digits, 10 integer (15-5), 5 decimal)

0 votes

Le lien est maintenant mort, malheureusement.

1 votes

@MarcoAurélioDeleu - J'ai modifié le lien pour qu'il pointe vers la page sur la Wayback Machine, afin que vous puissiez la voir telle qu'elle était en 2009.

19voto

Leah Points 2156

Il est également important de déterminer le nombre de décimales nécessaires pour vos calculs.

J'ai travaillé sur une application sur le prix des actions qui nécessitait le calcul du prix d'un million d'actions. Le cours de l'action devait être stocké avec une précision de 7 chiffres.

8 votes

C'est un bon point - surtout dans les applications financières, "prix" n'implique certainement pas "argent".

17voto

Scott Ferguson Points 3418

La réponse d'Assaf de

Ça dépend de combien d'argent vous avez...

ça semble désinvolte, mais en fait c'est pertinent.

Pas plus tard qu'aujourd'hui, nous avons eu un problème où un enregistrement n'a pas pu être inséré dans notre table des tarifs, parce que l'une des colonnes (GrossRate) est définie comme décimale (11,4), et notre département des produits vient d'obtenir un contrat pour des chambres dans un superbe complexe touristique à Bora Bora, qui se vendent plusieurs millions de francs pacifiques par nuit... ce qui n'a jamais été prévu lorsque le schéma de la base de données a été conçu il y a 10 ans.

2 votes

C'est pourquoi j'ai recommandé la décimale (19,4). Cela peut sembler exagéré, mais on ne sait jamais quand on aura besoin de stocker un montant vraiment important dans ce champ.

2 votes

@Kibbee : Je n'aurais pas été d'accord avec vous pour nos exigences jusqu'à aujourd'hui. (Pendant 6 ans (11,4) était parfaitement bien...)

13voto

Dane Bendixen Points 59

Pour les applications de comptabilité, il est très courant de stocker les valeurs sous forme d'entiers (certains vont même jusqu'à dire que c'est la méthode la plus simple de stocker les valeurs. uniquement manière). Pour vous faire une idée, prenez le montant des transactions (supposons 100,23 $) et multipliez-le par 100, 1000, 10000, etc. pour obtenir la précision dont vous avez besoin. Ainsi, si vous n'avez besoin de stocker que des centimes et que vous pouvez arrondir sans risque, il vous suffit de multiplier par 100. Dans mon exemple, cela donnerait 10023 comme nombre entier à stocker. Vous gagnerez de l'espace dans la base de données et la comparaison de deux entiers est beaucoup plus facile que de comparer deux flottants. Mon avis.

0 votes

Comment stocker 6,125 (6 1/8) ?

0 votes

Je suppose qu'il le stockerait comme un nombre entier 6125.

4 votes

En quoi cela serait-il mieux que DECIMAL ? Il faudrait que vous soyez très Attention à toujours convertir les centimes, les mills ou les millrays en dollars, aux moments opportuns.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X