Maison > Article > base de données > Quel type MySQL utilise-t-il pour les décimales ?
Les types disponibles pour les décimales MySQL : 1. Type FLOAT, qui peut stocker des nombres à virgule flottante simple précision ; 2. Type DOUBLE, qui peut stocker des nombres à virgule flottante double précision ; 3. Type DECIMAL, utilisé pour stocker des nombres décimaux précis ; valeurs, telles que la devise dans les données des systèmes comptables.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Les nombres à virgule flottante et les nombres à virgule fixe sont utilisés pour représenter les décimales dans MySQL.
Il existe deux types à virgule flottante, les nombres à virgule flottante simple précision (FLOAT) et les nombres à virgule flottante double précision (DOUBLE) ; il n'existe qu'un seul type à virgule fixe, qui est DECIMAL ;
Les types à virgule flottante et les types à virgule fixe peuvent être représentés par (M, D), où M est appelé précision, indiquant le nombre total de chiffres ; D est appelé échelle, indiquant le nombre de chiffres décimaux.
La plage de valeurs du type de nombre à virgule flottante est M (1 ~ 255) et D (1 ~ 30, et ne peut pas être supérieure à M-2), qui représentent respectivement la largeur d'affichage et le nombre de décimales. M et D sont facultatifs dans FLOAT et DOUBLE, et les types FLOAT et DOUBLE seront enregistrés avec la précision maximale prise en charge par le matériel. La valeur D par défaut pour DECIMAL est 0 et la valeur M est 10.
Le tableau suivant répertorie les types décimaux et les exigences de stockage dans MySQL.
Le type DECIMAL est différent de FLOAT et DOUBLE. DOUBLE est en fait stocké sous la forme d'une chaîne. La plage de valeurs maximale possible de DECIMAL est la même que celle de DOUBLE, mais la plage de valeurs effective est déterminée par M et D. Si M est modifié et D est fixe, la plage de valeurs s'élargit à mesure que M grandit.
Comme vous pouvez le voir dans le tableau ci-dessus, l'espace de stockage de DECIMAL n'est pas fixe, mais est déterminé par la valeur de précision M, occupant M+2 octets.
La plage de valeurs du type FLOAT est la suivante :
La plage de valeurs signée : -3.402823466E+38~-1.175494351E-38.值 La valeur du non-symbole : 0 et -1.175494351E-38 ~ -3.402823466e+38. La plage de valeurs du type
La plage de valeurs signée : -1.7976931348623157E+308~-2.2250738585072014E-308. ♥ plage de valeurs non signées : 0 et -2,2250738585072014E-30 8~-1.7976931348623157E+308.
FLOAT et DOUBLE prendront par défaut la précision réelle lorsque la précision n'est pas spécifiée. DECIMAL sera par défaut (10, 0) si la précision n'est pas spécifiée.
Type DECIMAL
Le type de données DECIMAL
est utilisé pour stocker des valeurs précises dans la base de données. Nous utilisons souvent le type de données DECIMAL
pour les colonnes qui conservent une précision précise, comme les données monétaires dans les systèmes comptables.
Pour définir une colonne avec le type de données DECIMAL
, utilisez la syntaxe suivante : column_name DECIMAL(P,D);
Dans la syntaxe ci-dessus :
P
est le nombre de chiffres significatifs précision. La plage de P
est 1~65
. D
représente le nombre de chiffres après la virgule décimale. La plage de D
est 0
~30
. MySQL exige que D
soit inférieur ou égal à () <code>P
. DECIMAL
数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL
数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL
的列,请使用以下语法:
amount DECIMAL(6,2);
在上面的语法中:
P
是表示有效数字数的精度。 P
范围为1〜65
。D
是表示小数点后的位数。 D
的范围是0
~30
。MySQL要求D
小于或等于()<code>P
。
DECIMAL(P,D)
表示列可以存储D
位小数的P
位数。十进制列的实际范围取决于精度和刻度。
与INT数据类型一样,DECIMAL
类型也具有UNSIGNED
和ZEROFILL
属性。 如果使用UNSIGNED
属性,则DECIMAL UNSIGNED
的列将不接受负值。
如果使用ZEROFILL
,MySQL将把显示值填充到0
以显示由列定义指定的宽度。 另外,如果我们对DECIMAL
列使用ZERO FILL
,MySQL将自动将UNSIGNED
属性添加到列。
以下示例使用DECIMAL
数据类型定义的一个叫作amount
的列。
column_name DECIMAL(P);
在此示例中,amount
列最多可以存储6
位数字,小数位数为2
位; 因此,amount
列的范围是从-9999.99
到9999.99
。
MySQL允许使用以下语法:
column_name DECIMAL(P,0);
这相当于:
column_name DECIMAL;
在这种情况下,列不包含小数部分或小数点。
此外,我们甚至可以使用以下语法。
amount DECIMAL(19,2);
在这种情况下,P
的默认值为10
DECIMAL(P, D)
signifie que la colonne peut stocker P
chiffres de D
décimales. La plage réelle d'une colonne décimale dépend de la précision et de l'échelle. Comme le type de données INT, le type DECIMAL
possède également les attributs UNSIGNED
et ZEROFILL
. Si l'attribut UNSIGNED
est utilisé, la colonne DECIMAL UNSIGNED
n'acceptera pas de valeurs négatives. Si vous utilisez ZEROFILL
, MySQL complétera la valeur d'affichage à 0
pour afficher la largeur spécifiée par la définition de colonne. De plus, si nous utilisons ZERO FILL
sur une colonne DECIMAL
, MySQL ajoutera automatiquement l'attribut UNSIGNED
à la colonne.
amount
définie à l'aide du type de données DECIMAL
. 🎜amount DECIMAL(19,4);🎜Dans cet exemple, la colonne
amount
peut stocker jusqu'à 6
chiffres avec 2
décimales, donc La plage de ; la colonne montant
va de -9999.99
à 9999.99
. 🎜🎜MySQL autorise la syntaxe suivante : 🎜CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );🎜 Cela équivaut à : 🎜
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);🎜 Dans ce cas, la colonne ne contient pas de partie décimale ni de point décimal. 🎜🎜De plus, nous pouvons même utiliser la syntaxe suivante. 🎜
SELECT * from test_order🎜Dans ce cas, la valeur par défaut de
P
est 10
. 🎜🎜🎜🎜Stockage DÉCIMAL MySQL🎜🎜🎜MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL
值。它将9
位数字包装成4
个字节。
对于每个部分,需要4
个字节来存储9
位数的每个倍数。剩余数字所需的存储如下表所示:
剩余数字 | 位 |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7-9 | 4 |
例如,DECIMAL(19,9)
对于小数部分具有9
位数字,对于整数部分具有19
位= 10
位数字,小数部分需要4
个字节。 整数部分对于前9
位数字需要4
个字节,1
个剩余字节需要1
个字节。DECIMAL(19,9)
列总共需要9
个字节。
MySQL DECIMAL数据类型和货币数据
经常使用DECIMAL
数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -
amount DECIMAL(19,2);
但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4
位小数,以确保舍入值不超过$0.01
。 在这种情况下,应该定义具有4
位小数的列,如下所示:
amount DECIMAL(19,4);
MySQL DECIMAL数据类型示例
首先,创建一个名为test_order
的新表,其中包含三列:id
,description
和cost
。
CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );
第二步,将资料插入test_order表。
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三步,从test_order表查询数据。
SELECT * from test_order
第四步,更改cost
列以包含ZEROFILL
属性。
ALTER TABLE test_order MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查询test_order表。
SELECT * from test_order
查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:
INSERT INTO test_order(description,cost) VALUES('test', -100.11); 提示: [SQL]INSERT INTO test_order(description,cost) VALUES('test', -100.11) [Err] 1264 - Out of range value for column 'cost' at row 1
其它插入测试结论:
当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
若数值在其取值范围之外,则直接报Out of range value错误。
【相关推荐:mysql视频教程】
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!