mysql decimal数据类型用法分析

发布时间:2020-08-19编辑:脚本学堂
有关mysql decimal数据类型的用法,mysql decimal类型用于精度要求高的计算中,numeric类型与decimal类型同义,numeric将自动转成decimal。

首先,对于精度比较高的东西,比如money,使用decimal类型,不会考虑float,double,容易产生误差。

numeric类型与decimal类型同义,numeric将自动转成decimal。

decimal从mysql 5.1引入,列的声明语法是decimal(m,d)。

在mysql 5.1中,参数取值范围:
m是数字的最大数(精度)。其范围为1~65(在较旧的mysql版本中,允许的范围是1~254),m 的默认值是10。
D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。

说明:
float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。
如decimal(5,2) 的最大值为9 9 9 9 . 9 9,因为有7 个字节可用。

M 与D 对DECIMAL(M, D) 取值范围的影响
类型说明取值范围(MySQL < 3.23)取值范围(MySQL >= 3.23)
 

复制代码 代码示例:
mysql < 3.23 mysql >=3.23
decimal(4, 1) -9.9 到 99.9 -999.9 到 9999.9
decimal(5,1) -99.9 到 999.9 -9999.9 到 99999.9
decimal(6,1) -999.9 到 9999.9 -99999.9 到 999999.9
decimal(6,2) -99.99 到 999.99 -9999.99 到 99999.99
decimal(6,3) -9.999 到 99.999 -999.999 到 9999.999
# 在mysql 3.23 及以后的版本中,decimal(m, d) 的取值范围等于早期版本中的decimal(m + 2, d) 的取值范围。

结论:
当数值在其取值范围之内,小数位多了,则直接截断小数位。
若数值在其取值范围之外,则用最大(小)值对其填充。

mysql decimal、numeric数据类型
decimal(m, d)

例子:
 

salary decimal(5,2)  

以上例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。
在这种情况下,salary 列可以存储的值范围是从 -999.99 到 999.99。(即M代表总位数,D代表小数点后的位数);
当插入的值超过存储值的范围会报错:(例如将1000.03赋给salary时)
Out of range value for column 'salary' at row 1
 
当插入的值小数点后位数大于D时会报警告:(例如将99.8888赋给salary时)
Data truncated for column'salary' at row 1
numeric(M,D)与DECIMAL(M, D)一样。