téléphone - Meilleur type de données pour stocker des valeurs monétaires dans MySQL




type numéro de téléphone mysql (7)

Nous utilisons double .

*haleter*

Pourquoi?

Parce qu'il peut représenter n'importe quel nombre à 15 chiffres sans contrainte sur l'emplacement du point décimal . Le tout pour un maigre 8 octets!

Cela peut donc représenter:

  • 0.123456789012345
  • 123456789012345.0

... et n'importe quoi entre.

C'est utile parce que nous traitons avec des devises globales , et le double peut stocker les différents nombres de décimales que nous rencontrerons probablement.

Un seul champ double peut représenter 999 999 999 999 999 en yens japonais, 9 999 999 999 999,99 en dollars américains et même 9 999 999,99999999 en bitcoins

Si vous essayez de faire la même chose avec decimal , vous avez besoin de decimal(30, 15) qui coûte 14 octets.

Avertissements

Bien sûr, l'utilisation du double n'est pas sans réserves.

Cependant, ce n'est pas une perte de précision, comme certains ont tendance à le souligner. Même si le double lui-même n'est pas nécessairement interne au système de base 10 , nous pouvons le rendre exact en arrondissant la valeur que nous tirons de la base de données à ses décimales significatives. Si nécessaire, c'est. (Par exemple, si cela va être produit, et une représentation de base 10 est nécessaire.)

Les mises en garde sont, chaque fois que nous effectuons l'arithmétique, nous avons besoin de normaliser le résultat (en l'arrondissant à ses décimales significatives) avant:

  1. Effectuer des comparaisons à ce sujet.
  2. L'écrire dans la base de données.

Une autre sorte de mise en garde est, contrairement à decimal(m, d) où la base de données empêchera les programmes d'insérer un nombre avec plus de m chiffres, aucune de ces validations n'existe avec double . Un programme pourrait insérer une valeur saisie par l'utilisateur de 20 chiffres et il finira par être enregistré silencieusement comme un montant inexact.

Je veux stocker beaucoup d'enregistrements dans une base de données MySQL. Tous contiennent des valeurs monétaires. Mais je ne sais pas combien de chiffres seront insérés pour chacun d'eux.
Quel type de données dois-je utiliser à cette fin?
VARCHAR ou INT (ou d'autres types de données numériques)?


Au moment où cette question a été posée personne n'a pensé au prix Bitcoin. Dans le cas de BTC, il est probablement insuffisant d'utiliser DECIMAL(15,2) . Si le Bitcoin atteint 100 000 $ ou plus, nous aurons besoin d'au moins DECIMAL(18,9) pour prendre en charge les cryptocurrences dans nos applications.

DECIMAL(18,9) prend 12 octets d'espace dans MySQL ( 4 octets par 9 chiffres ).


En effet, cela dépend des préférences du programmeur. J'utilise personnellement: numeric(15,4) pour se conformer aux principes comptables généralement reconnus ( PCGR ) .


Essayez d'utiliser

Decimal(19,4)

cela fonctionne généralement avec tous les autres DB ainsi



Puisque l'argent a besoin d'une représentation exacte n'utilisez pas les types de données qui sont seulement approximatifs comme float . Vous pouvez utiliser un type de données numériques à virgule fixe pour cela

decimal(15,2)
  • 15 est la précision (longueur totale de la valeur incluant les décimales)
  • 2 est le nombre de chiffres après le point décimal

Voir les types numériques de MySQL :

Ces types sont utilisés lorsqu'il est important de conserver une précision exacte, par exemple avec des données monétaires .


Vous pouvez utiliser DECIMAL ou NUMERIC deux sont identiques

Les types DECIMAL et NUMERIC stockent des valeurs de données numériques exactes. Ces types sont utilisés lorsqu'il est important de conserver une précision exacte, par exemple avec des données monétaires. En MySQL, NUMERIC est implémenté en tant que DECIMAL, donc les remarques suivantes concernant DECIMAL s'appliquent également à NUMERIC. : MySQL

c'est-à-dire DECIMAL(10,2)

Bonne lecture







currency