标签(空格分隔): MYSQL


基本语法

MYSQL中,FLOAT,DOUBLE,DECIMAL 都可以存储小数,但是FLOAT/DOUBLE 存储的是近似值,对于money等对精度要求高的场合不适用。
DECIMAL 类型以字符串形式存储,支持精确的小数运算。
DECIMAL 同义词有 DEC,NUMERIC,FIXED.

DECIMAL字段的声明语法是

DECIMAL(M,D)

取值范围

类型说明

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 ]

小结:
1. M是数字的最大个数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
2. D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
3. 整数部分数字个数 负数为 M-D,正数为 M-D+1,因为正数不需要存储符号,所以多出一位
3. float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。

DECIMAL 和 FLOAT 的区别

  1. DECIMAL支持精确计算,FLOAT支持浮点运算
  2. 因为 CPU 不支持对 DEClMAL 的直接计算,所以在 MySQL 5.0 以及更高版本中, MySQL 服务器自身实现了 DECIMAL 的高精度计算。相对而言, CPU 直接支持原生浮点计算,所 以浮点运算明显更快。
  3. 浮点类型在存储同样范围的值时,通常比 DECIMAL 使用更少的空间。 FLOAT 使用 4个字 节存储。 DOUBLE 占用8个字节。
    小结:
    对于要求精确计算的数据可以乘以相应倍数然后将结果存储在 BIGINTEGER 里,这样可以同时避免浮点存储计算不精确和 DECIMAL 精确计算代价高的问题。