根据我对mysql文档中DECIMAL
手册的理解,它指出,9位数的每一个倍数需要4个字节,剩下的数字如下;
number of digits leftover | bytes
0 | 0
1 | 1
2 | 1
3 | 2
4 | 2
5 | 3
6 | 3
7 | 4
8 | 4
字符串
所以一个decimal(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如何检索或索引列吗?
3条答案
按热度按时间vbopmzt11#
对于MySQL 5.1(及更高版本),它将整数部分和小数部分的存储空间分开,并为最大可能的数字腾出空间。因此,对于DECIMAL(12,6),您需要3个字节用于整数部分,3个字节用于小数部分。它看起来并不像是根据值减少存储空间;它将内存放在一边,不管值是什么。
你可以在这里查看文档:
MySQL Decimal Manual Page
mm9b1k5b2#
字符串
一曰:178.999999 //整数部分有3位数,因此总数为5个字节(正确)2:0.880000 //整数部分有1位数,因此总数为4个字节?(错误)3 123456.123456 // 6位数等于6个字节?(正确)
说明:剩余数字个数为100 0
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
所有9的倍数将包含4个字节
所以0.880000将取0为整数部分,取3为小数部分,因此0+3=3
bbuxkriu3#
可以用这个函数计算:
字符串
source
要创建某些值的列表,请使用:用途:
型