数据类型格式DECIMAL(M
,D
)html
M:是整个数字的最大长度, 取值范围 [1,65]mysql
D:小数点后面的长度,取值范围为[0,30], 而且 D<=Mgit
若是D省略,默认值为0,若是M省略,默认值为10。github
数据类型为DECIMAL的列,使用的是二进制字节存储。sql
每9个长度,占用4字节,不足9位长度,则按照以下:spa
剩余字节 | 占用空间(字节) |
0 | 0 |
1-2 | 1 |
3-4 | 2 |
5-6 | 3 |
7-9 | 4 |
例如:code
1: DECIMAL(18,9) 整数部分长度为9,分数部分长度为9;因此整数部分占用4字节,分数部分占用4字节。server
2:DECIMAL(20,6) 整数部分长度为14,分数部分长度为6;整数部分占用 4+3=7字节,分数部分占用3字节。htm
DECIMAL列不存储正负号(+、-)和0前缀。好比, DECIMAL(5,1)插入 +0003.1,则实际存储为 3.1;对于负数,“-”符号不会存储。ci
对于与金融相关货币存储, 若是单位为元,DECIMAL(20,4) , 单位为分,能够用 bigint。
参考文档: https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
参考源码:https://github.com/mysql/mysql-server/blob/5.7/strings/decimal.c