在数据库中,DECIMAL
类型的精度通过指定总位数(精度)和小数位数(标度)来设置。语法通常如下:
DECIMAL(M, D)
-
M
:表示总的数字位数(精度),包括小数点左边和右边的数字。 -
D
:表示小数点右边的数字位数(标度)。
示例:
-
DECIMAL(6, 2)
:-
总共有 6 位数字。
-
小数点后有 2 位。
-
可以存储的值范围是
-9999.99
到9999.99
。
-
-
DECIMAL(10, 5)
:-
总共有 10 位数字。
-
小数点后有 5 位。
-
可以存储的值范围是
-99999.99999
到99999.99999
。
-
创建表时设置精度
在创建表时,可以直接在列定义中指定 DECIMAL
类型的精度。例如:
CREATE TABLE example (id INT PRIMARY KEY,value DECIMAL(6, 2)
);
在这个例子中,value
列可以存储最多 6 位数字,其中小数点后有 2 位。
修改表时设置精度
如果需要修改现有列的精度,可以使用 ALTER TABLE
语句。例如:
ALTER TABLE example
MODIFY value DECIMAL(10, 5);
在这个例子中,value
列的精度被修改为总共有 10 位数字,其中小数点后有 5 位。
注意事项
1、精度和标度的限制:
-
不同的数据库系统可能对
M
和D
的最大值有不同的限制。例如,MySQL 中M
的最大值为 65,D
的最大值为 30。 -
确保选择的精度和标度能够满足你的数据存储需求。
2、数据截断:
如果插入的数值超过定义的精度和标度,可能会导致数据截断或报错,具体行为取决于数据库系统的设置。
3、存储空间:
DECIMAL
类型的存储空间取决于精度和标度。通常每 9 位数字占用 4 个字节,但具体实现可能因数据库系统而异。
适用场景
-
存储货币值(如金额)。
-
存储需要高精度的科学数据(如实验结果)。
-
任何需要精确控制小数位数的场景。