Je ne peux pas tout à fait comprendre DECIMAL de MySQL. J'ai besoin que la ligne puisse contenir un nombre allant de 00,0001 à 99,9999. Comment pourrais-je le structurer pour qu'il fonctionne ainsi?
Je ne peux pas tout à fait comprendre DECIMAL de MySQL. J'ai besoin que la ligne puisse contenir un nombre allant de 00,0001 à 99,9999. Comment pourrais-je le structurer pour qu'il fonctionne ainsi?
Réponses:
Les colonnes DOUBLE ne sont pas les mêmes que les colonnes DECIMAL et vous aurez des problèmes si vous utilisez des colonnes DOUBLE pour les données financières.
DOUBLE n'est en fait qu'une version double précision (64 bits au lieu de 32 bits) de FLOAT . Les nombres à virgule flottante sont des représentations approximatives de nombres réels et ils ne sont pas exacts. En fait, les nombres simples comme 0.01 n'ont pas de représentation exacte dans les types FLOAT ou DOUBLE.
Les colonnes DECIMAL sont des représentations exactes, mais elles prennent beaucoup plus d'espace pour une gamme beaucoup plus petite de nombres possibles. Pour créer une colonne capable de contenir des valeurs de 0,0001 à 99,9999 comme vous l'avez demandé, vous auriez besoin de l'instruction suivante
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
La définition de la colonne suit le format DECIMAL (M, D) où M est le nombre maximum de chiffres (la précision ) et D est le nombre de chiffres à droite du point décimal (l' échelle ).
Cela signifie que la commande précédente crée une colonne qui accepte les valeurs comprises entre -99,9999 et 99,9999. Vous pouvez également créer une colonne DECIMAL NON SIGNÉE, allant de 0,0000 à 99,9999.
Pour plus d'informations sur MySQL DECIMAL, les documents officiels sont toujours une excellente ressource.
Gardez à l'esprit que toutes ces informations sont vraies pour les versions de MySQL 5.0.3 et supérieures. Si vous utilisez des versions précédentes, vous devriez vraiment mettre à niveau.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Il renverra une erreur hors plage pour les valeurs négatives. Vous pouvez également créer FLOAT et DOUBLE non signés. Manuel: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Bien que les réponses ci-dessus semblent correctes, il suffit d'une simple explication pour vous donner une idée de son fonctionnement.
Supposons que votre colonne soit définie sur DECIMAL(13,4)
. Cela signifie que la colonne aura une taille totale de 13 chiffres dont 4 seront utilisés pour la représentation de précision.
Donc, en résumé, pour cette colonne, vous auriez une valeur maximale de: 999999999.9999
Il existe des solutions correctes dans les commentaires, mais pour les résumer en une seule réponse:
Vous devez utiliser DECIMAL (6,4).
Ensuite, vous pouvez avoir 6 chiffres au total, 2 avant et 4 après la virgule décimale (l'échelle). Au moins d'après cela .
MySQL 5.x spécification pour le type de données décimal est: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. La réponse ci-dessus est erronée en disant que les décimales non signées ne sont pas possibles.
Pour définir un champ permettant uniquement les décimales non signées, avec une longueur totale de 6 chiffres, dont 4 décimales, utilisez: DECIMAL (6,4) UNSIGNED
.
Vous pouvez également créer des types de données FLOAT et DOUBLE non signés (c'est-à-dire non négatifs).