Maison  >  Article  >  base de données  >  Introduction détaillée à la différence entre le type Decimal et Float Double dans MySQL

Introduction détaillée à la différence entre le type Decimal et Float Double dans MySQL

黄舟
黄舟original
2017-03-24 13:20:171973parcourir

L'éditeur suivant vous apportera un article sur la différence entre le type Decimal dans MySQL et le Float Double (explication détaillée). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

MySQL a des types de données non standard tels que float et double , et il existe également des types de données standard tels que décimal.

La différence est que les types non standard tels que float et double stockent des valeurs approximatives dans DB, tandis que Decimal stocke les valeurs sous forme de chaînes.
Les types Float et double peuvent stocker des nombres à virgule flottante (c'est-à-dire des types décimaux), mais float présente un inconvénient lorsque les données que vous fournissez sont un entier, il les traitera pour vous comme un entier. De cette façon, nous rencontrons naturellement des problèmes lors du dépôt et du retrait de valeurs monétaires. Ma valeur par défaut est : 0,00 et le stockage réel est 0. De même, lorsque je dépose et retire des devises, il est 12,00 et le stockage réel est 12.

Heureusement, mysql fournit deux types de données : décimal Ce type de données peut facilement résoudre le problème ci-dessus : le type décimal est implémenté par MySQL comme le même type, ce qui est autorisé dans la norme SQL92. Ils sont utilisés pour stocker des valeurs dont la précision est importante, comme les données liées à l'argent.

Définition des données

float(M,S) M est la longueur totale, S est la longueur après la virgule décimale. Il existe de nombreux exemples inexacts sur Internet. Copie est la suivante :

mysql> create table t1(c1 float(10,2), c3decimal(10,2));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+----------------+-----------------+
| c1 | c3 |
+----------------+-----------------+
| 9876543.00 | 9876543.12 |
+----------------+------------------+

2 lignes dans l'ensemble (0,00 sec)

Un autre. exemple : DECIMAL(5,2)

mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,id3 decimal(5,2) default null );
mysql> insert into t1 values(1.2345,1.2345,1.2345);Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

1.2345 --- Jusqu'à 2 chiffres après la virgule décimale, pour pouvoir être sauvegardés, les données seront automatiquement arrondi et tronqué, mais décroissant

12.34 --- OK

1234.5 --- Parce que la partie décimale est inférieure à 2 chiffres, 0 doit être ajouté, donc la valeur doit être enregistrée sous 1234,50. Par conséquent, le nombre total de chiffres dépasse 5 et une erreur est signalée lors de l'enregistrement.

1.2 --- Remplissez la partie décimale avec des 0. Enregistrez selon 1.20.

Comparaison de l'état par défaut

Si la longitude et l'échelle ne sont pas écrites dans le nombre à virgule flottante, elles seront enregistrées selon la valeur de précision réelle. S'il y a une précision et une échelle, le résultat arrondi sera automatiquement inséré et le système ne signalera pas d'erreur si la précision et l'échelle ne sont pas écrites pour les nombres à virgule fixe, la valeur par défaut est décimale (10 ; ,0) sera utilisé si les données dépassent la valeur de précision et d’échelle, le système signalera une erreur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn