我正在使用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中也是这样优化的吗?
答案 0 :(得分:2)
我认为答案是它无论如何都需要17个字节。如果您注意到,在链接的手册页中有详细说明,DBMS无法记录该值的“长”程度。相比之下,对于VARCHAR(255) CHARACTER SET ascii
列,在值的开头有一个字节,表示该值的长度(最大大小为256字节)。对于VARCHAR(1000) CHARACTER SET ascii
列,有两个字节表示长度。这里没有详细的方法来记录值的长度,这使我得出结论,该列总是占用最大的空间量。
答案 1 :(得分:1)
十进制是“固定长度”,因此每个值需要17个字节