我用的是MySQL,我所有的表都用的是InnoDB引擎。我有一些列声明为DECIMAL(38,0),它们被广泛使用。根据MySQL文档(http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html),38位数值需要17个字节(38 =4*9+ 2;4*4+1= 17)。好吧。
但是,这是否意味着存储在此列中的任何值都将占用17个字节?例如,对于值432 -是否只占用4个字节(我真的希望如此…)或者它会占用17个字节?
最后,我知道在Oracle中占用的大小取决于存储的实际值。但是它在MySQL中也是这样优化的吗?
发布于 2012-02-06 23:11:31
我认为答案是,无论如何它都需要17个字节。如果您注意到了,在链接的手册页面中,DBMS没有办法记录该值有多“长”。相比之下,对于VARCHAR(255) CHARACTER SET ascii列,值的开头只有一个字节,表示值有多长(最大大小为256字节)。对于VARCHAR(1000) CHARACTER SET ascii列,有两个字节表示长度。这里没有详细记录该值的长度,这使我得出结论,该列总是占用最大的空间量。
发布于 2012-02-06 23:09:39
Decimal是“固定长度”,因此每个值需要17个字节
https://stackoverflow.com/questions/9162145
复制相似问题