在云上的IBMDB2中定义一个比所需更长的VARCHAR()列是否会浪费空间?

在云上的IBMDB2中定义一个比所需更长的VARCHAR()列是否会浪费空间?,db2,ibm-cloud,db2-luw,Db2,Ibm Cloud,Db2 Luw,我们通常有可以包含大小不同的值的列。对于这些,我喜欢将数据类型设置为VARCHAR,其大小远远超过当前的最大长度。例如,如果我有一个列,其中一个值的当前最小长度为10,最大长度为35,我可能会将数据类型设置为VARCHAR(64)。我的基本原理是Db2存储2字节的长度,后跟精确的值,因此,从存储的角度来看,将数据类型定义为VARCHAR(64),而不是VARCHAR(35),没有区别。如果我得到一个长度为36的值,我不会得到一个错误 我是否有遗漏的细微差别?我是否应该对我的VARCHAR作业如此

我们通常有可以包含大小不同的值的列。对于这些,我喜欢将数据类型设置为
VARCHAR
,其大小远远超过当前的最大长度。例如,如果我有一个列,其中一个值的当前最小长度为10,最大长度为35,我可能会将数据类型设置为
VARCHAR(64)
。我的基本原理是Db2存储2字节的长度,后跟精确的值,因此,从存储的角度来看,将数据类型定义为
VARCHAR(64)
,而不是
VARCHAR(35)
,没有区别。如果我得到一个长度为36的值,我不会得到一个错误


我是否有遗漏的细微差别?我是否应该对我的
VARCHAR
作业如此油嘴滑舌?

计算行长的确切公式在文档中有详细描述。VARCHAR(64)或VARCHAR(35)不应该有区别

请注意,行存储在表空间的数据页中。出于性能原因,数据库系统通常会预先分配页面。此外,页面可能未完全填充或存在压缩。您可能已经定义了索引,这些索引需要自己的具有结构的页面。此外,系统目录中还有元数据