十进制mysql和存储空间?
根据我对mysql文档中的十进制mysql和存储空间?,mysql,decimal,Mysql,Decimal,根据我对mysql文档中的DECIMAL手册的理解,它指出九位数的每一个倍数需要4个字节,以下是剩余的数字 number of digits leftover | bytes 0 | 0 1 | 1 2 | 1 3 | 2 4
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
那么一个十进制(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?
或者如果声明为(12,6)
,它将始终是6个字节吗
编辑
另外,声明为(5,5)
的十进制数需要存储6个字节,声明为(12,6)
的十进制数也需要存储6个字节。既然存储大小不是问题,那么大小的差异会影响mysql检索或索引列的方式吗?对于mysql 5.1(及更高版本),它将存储划分为整数部分和小数部分,并为可能最大的数字留出存储空间。所以对于十进制(12,6),整数部分需要3个字节,小数部分需要3个字节。它看起来不像是根据值减少存储空间;无论值是什么,它都会将内存放在一边
您可以在此处查看文档:
1:178.999999//3位为整数部分,因此总计为5字节(正确)
2:0.880000//1位表示整数部分,因此总计为4字节?(错误)
3 123456.123456//6位数字等于6字节?(正确)
说明:
剩余位数字节数
0 0
11
2.1
3.2
4.2
5.3
6.3
7 4
8 4
9的所有倍数将包含4个字节
因此,0.880000将取0表示整数部分,取3表示小数部分,因此0+3=3
DECIMAL(12,6)