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