mysql和DECIMAL存储空间?

Gri*_*iff 5 mysql decimal

根据我对 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 检索或索引列的方式吗?

jua*_*ala 6

对于 MySQL 5.1(及更高版本),它将整数部分和小数部分的存储分开,并为最大可能的数字腾出存储空间。因此,对于 DECIMAL(12,6),整数部分需要 3 个字节,小数部分需要 3 个字节。看起来它并没有根据值减少存储;无论值是多少,它都会将内存放在一边。

您可以在此处查看文档:

MySQL 十进制手册页