Quel est le meilleur type de données SQL pour les valeurs monétaires? J'utilise MySQL mais préférerais un type indépendant de la base de données.
mysql
sql
sqldatatypes
Brian Fisher
la source
la source
Réponses:
Quelque chose comme ça
Decimal(19,4)
fonctionne généralement bien dans la plupart des cas. Vous pouvez ajuster l'échelle et la précision pour répondre aux besoins des nombres que vous devez stocker. Même dans SQL Server, j'ai tendance à ne pas utiliser "money
" car il n'est pas standard.la source
(19,4)
place de(19,2)
?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) signifient des choses différentes
( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )
la source
Il est également important de déterminer combien de décimales peuvent être nécessaires pour vos calculs.
J'ai travaillé sur une application de cours de bourse qui nécessitait le calcul du prix d'un million d'actions. Le prix de l'action coté devait être stocké à 7 chiffres de précision.
la source
Réponse d'Assaf de
semble désinvolte, mais en fait c'est pertinent.
Aujourd'hui seulement, nous avons eu un problème où un enregistrement n'a pas pu être inséré dans notre table de taux, car l'une des colonnes (GrossRate) est définie sur Decimal (11,4), et notre service produit vient d'obtenir un contrat pour des chambres dans un complexe incroyable à Bora Bora, qui se vendent plusieurs millions de francs pacifiques par nuit ... ce qui n'avait jamais été prévu lorsque le schéma de la base de données a été conçu il y a 10 ans.
la source
Pour les applications comptables, il est très courant de stocker les valeurs sous forme d'entiers (certains vont même jusqu'à dire que c'est le seul moyen). Pour vous faire une idée, prenez le montant des transactions (supposons 100,23 $) et multiple de 100, 1000, 10000, etc. pour obtenir la précision dont vous avez besoin. Donc, si vous avez seulement besoin de stocker des cents et que vous pouvez arrondir vers le haut ou vers le bas en toute sécurité, multipliez simplement par 100. Dans mon exemple, cela ferait 10023 comme entier à stocker. Vous économiserez de l'espace dans la base de données et comparer deux entiers est beaucoup plus facile que de comparer deux flottants. Mon 0,02 $.
la source
DECIMAL
? Vous devez faire très attention à toujours convertir des pièces de monnaie, des moulins ou des millrays en dollars, aux moments appropriés.entrée super tardive mais les PCGR sont une bonne règle de base ..
Source: meilleur type de données pour stocker la valeur monétaire dans MySQL
la source
Vous pouvez utiliser quelque chose comme
DECIMAL(19,2)
par défaut pour toutes vos valeurs monétaires, mais si vous ne stockez jamais que des valeurs inférieures à 1000 $, cela va juste être un gaspillage d'espace de base de données précieux.Pour la plupart des implémentations, ce
DECIMAL(N,2)
serait suffisant, où la valeur deN
est au moins le nombre de chiffres avant.
la plus grande somme que vous vous attendiez à être stockée dans ce champ+ 5
. Donc, si vous ne vous attendez jamais à stocker des valeurs supérieures à 999999,99, celaDECIMAL(11,2)
devrait être plus que suffisant (jusqu'à ce que les attentes changent).Si vous voulez être conforme aux PCGR , vous pouvez aller avec
DECIMAL(N,4)
, où la valeur deN
est au moins le nombre de chiffres avant.
la plus grande somme que vous vous attendez à être stockée dans ce champ+ 7
.la source
Cela dépend de la nature des données. Vous devez le contempler au préalable.
Mon cas
Pourquoi (M, 4)?
Troquer
Compatible Extreme
Bien que MySQL vous permette d'utiliser décimal (65,30), 31 pour l'échelle et 30 pour la précision semblent être nos limites si nous voulons laisser l'option de transfert ouverte.
Échelle et précision maximales dans les SGBDR les plus courants:
6 , 7 , 8 , 9
Extrême raisonnable
Nous avons tendance à dire "oui, bien sûr ... je n'aurai pas besoin de ces chiffres fous". Eh bien, les Zimbabwéens disaient ça aussi. Il n'y a pas si longtemps.
Imaginons que vous ayez besoin d'enregistrer une transaction de 1 mln USD en dollars zimbabwéens (peut-être peu probable aujourd'hui, mais qui sait à quoi cela ressemblera dans 10 ans?).
la source
Bien que cela puisse être en retard, mais cela sera utile à quelqu'un d'autre. D'après mon expérience et mes recherches, j'ai appris à connaître et à accepter les décimales (19, 6). C'est lorsque je travaille avec php et mysql. lorsque vous travaillez avec une grande quantité d'argent et un taux de change
la source