Decimal 在 MySQL 中作为定点数类型,存储的是准确的数字,因此在设计字段时需制定精度和标度。
精度(M):所有数字的位数,缺省值为 10,最大值为 65
标度(D): 小数点后的数字位数,缺省值为 0
缺省值说明:
若定义 Decimal(4) 则等价于定义 Decimal(4, 0)
若定义 Decimal() 则等价于定义 Decimal(10, 0)
Decimal 使用二进制格式存储,所占存储空间取决于其精度。
根据精度(M),每 9 位数字包装成 4 个字节 (4B),不足 9 位的,剩余数字所需的存储如下表所示:
剩余数字 | 所占空间 |
---|---|
1, 2 | 1 字节 (1B) |
3, 4 | 2 字节 (2B) |
5, 6 | 3 字节 (3B) |
7, 8, 9 | 4 字节 (4B) |
Decimal(5,2) 占 3B 空间,存储数据范围为 [ -999.99, 999.99 ]
Decimal(2,2) 占 1B 空间,存储数据范围为 [ -0.99, 0.99 ]
Decimal(4) 占 2B 空间,存储数据范围为 [ -9 999, 9 999 ]
Decimal() 占 5B 空间,存储数据范围为 [ -9 999 999 999, 9 999 999 999 ]
对 Decimal(4,2) 插入 12.34 则实际存储 12.34
对 Decimal(4,2) 插入 12.345 则实际存储 12.35 (四舍五入)
对 Decimal(4,2) 插入 12.3 则实际存储 12.30 (余位补零)
对 Decimal(4,2) 插入 123.4 则无法存储 (整数位超限)
总结规律,Decimal(4,2) 代表:整数最多 2 位、小数必须 2 位。