根据我对 mysql 文档中的手册的理解DECIMAL,它指出九个数字的每个倍数需要 4 个字节,以下是剩余的数字;
number of digits leftover | bytes
0 | 0
1 | 1
2 | 1
3 | 2
4 | 2
5 | 3
6 | 3
7 | 4
8 | 4
Run Code Online (Sandbox Code Playgroud)
那么 adecimal(12,6)等于总存储空间中的 6 个字节吗?
我知道小数部分将始终等于 6 位数字,因为填充了零,但整数部分对于列而言并非如此,DECIMAL(12,6)存储是按行还是在列定义时计算值?
例子
DECIMAL(12,6)
1: 178.999999 // 3 digits for integer part so total would be 5 bytes?
2: 0.880000 // 1 digits for integer part so total would be 4 bytes?
3 123456.123456 // 6 digits would equal 6 bytes?
Run Code Online (Sandbox Code Playgroud)
或者如果声明它总是 6 字节(12,6)?
编辑
此外,声明为的小数(5,5)将需要 6 个字节来存储,声明为的小数(12,6)也将需要 6 个字节来存储。既然存储大小不是问题,那么大小的差异会影响 mysql 检索或索引列的方式吗?
对于 MySQL 5.1(及更高版本),它将整数部分和小数部分的存储分开,并为最大可能的数字腾出存储空间。因此,对于 DECIMAL(12,6),整数部分需要 3 个字节,小数部分需要 3 个字节。看起来它并没有根据值减少存储;无论值是多少,它都会将内存放在一边。
您可以在此处查看文档:
| 归档时间: |
|
| 查看次数: |
7662 次 |
| 最近记录: |