mysql decimal
本篇讨论mysql decimal数据类型特征
分别从以下3个方面进行介绍:
1、最大位数
2、存储格式
3、存储要求
参考值:decimal(M, D)
1、最大位数
(1)M是最多的位数,范围从1到65;
(2)D是小数点右边的位数,范围从0到30,且不得大于M。
如:decimal(6,2)表示存储的最大位数为6位(小数点左边+右边),小数点右边最大存储2位,最大表示的值为9999.99。
如插入9999.999则报错:[Err] 1264 - Out of range value for column 'money' at row 1
2、存储格式
decimal列使用二进制格式进行存储,该格式将9个十进制的数字打包为4个字节,每个值的整数和小数部分的存储要求分别确定。9个数字的整数倍每个都需要4个字节,剩余的要需打包:
剩下的数字 |
字节数 |
0 |
0 |
1-2 |
1 |
3-4 |
2 |
5-6 |
3 |
7-9 |
4 |
如:(1)decimal(18, 9)小数点两边都有9位数,因此两边都需要4个字节
(2)decimal(20, 6)小数点左边需要4个字节+3个字节,右边需要3个字节
3、存储要求
decimal不存储前导+或-,或前导0
如:(1)插入+0001.1到decimal(4, 1)中,则将其存储为1.1
(2)对于负数,不存储文字字符,如decimal(6, 2)可存储-9999.99到9999.99
(3)decimal(2, 0)可存储-99到99
参考:
https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html