Stockage des valeurs de devise dans la base de données MySQL
Cette question a été posée de nombreuses fois avant, mais j'ai trouvé des avis divergents sur le sujet donc j'ai pensé le mettre de nouveau dans l'espoir d'une plus unifiée conclusion.
Je voudrais stocker la valeur de la monnaie dans ma base de données. Supposons que toutes les entrées sont le même type de devise (USD par exemple) et que les valeurs positives et négatives sont autorisées.
Ma première pensée serait de stocker la valeur d'un entier signé en termes de la plus petite unité de la devise. Par exemple, si je veux stocker la valeur de 1,25$, je voudrais insérer 125
dans la base de données, depuis la plus petite unité de USD est de 0,01$. La bonne chose à propos de cette méthode est que MySQL va automatiquement arrondir à l'entier le plus proche. Par exemple, si la valeur est $1.259, je pouvais insérer 125.9
qui sera automatiquement arrondi et stockées en tant que 126
ou à 1,26$.
Alors, qu'en pensez-vous? Est-ce une bonne approche ou est-il un meilleur moyen?
source d'informationauteur David Jones
Vous devez vous connecter pour publier un commentaire.
Financiers les données peuvent être stockées en tant que
DECIMAL(p,s)
où p est le nombre de chiffres significatifs, et s est l'ampleur (nombre de places à droite de la virgule). Voir La documentation de MySQL.Également de O'Reilly Haute Performance MySQLchapitre 3:
De O'Reilly L'Apprentissage MySQL:
Et MySQL De Poche:
Il n'y a rien de mal avec la démarche que vous décrivez. Il n'y a pas de bonne ou mauvaise quand il s'agit de cette question.
Vous devez garder à l'esprit que pour afficher une valeur en dollars de l'utilisateur, vous devez toujours faire une opération de division ou une sorte de mise en forme.
Qu'il sera plus facile à déboguer vos formules/calculs si tout était en cents ou en dollars? Vous serez en affichant les valeurs en cents ou en dollars? etc.
Keep it simple, mais de toute façon, vous aurez à utiliser une virgule.