VARCHARS:2,4,8,16等?还是1,3,7,15等?

时间:2009-08-03 19:40:57

标签: sql mysql storage limit varchar

我看到VARCHAR(255)一直在使用而不是VARCHAR(256),但我也看到使用VARCHAR(16)而不是VARCHAR(15)。这似乎与我不一致。如果使用额外的字节来存储VARCHAR的长度,那么这个规则是否也应该适用于较小的长度,如2,4,8,而不是1,3,7;

或者我完全错过了什么?

换句话说,如果我知道的数字永远不会超过12,那么我应该继续使用VARCHAR(15)还是VARCHAR(16)?因为它使用与VARCHAR(12)相同的空间量?如果是这样,我使用哪一个? 15或16?当我接近256时,这条规则是否会发生变化?

我使用MySQL和SQL,具体取决于项目。

3 个答案:

答案 0 :(得分:10)

  

换句话说,如果我知道的数字永远不会超过12,那么我应该继续使用VARCHAR(15)或VARCHAR(16)吗?

没有!使用varchar(12)(如果长度相当恒定,甚至可以使用char(12))。

曾几何时,varchar类型在某些系统(including MySql prior to 5.0.3)上限制为255个字符,因为存储的第一个字节表示字段的长度。鉴于此限制,开发人员希望允许合理数量的文本将选择255而不是完全不同的数据类型。

但是如果您知道数据的大小,那么肯定要使用该数据库的大小。

答案 1 :(得分:4)

它与奇数或偶数无关。

历史上,255个字符通常是各种DBMS中VARCHAR的最大长度。当时不是LOB(大对象)的字段的长度限制是255个字节(1个字节int)。因此,第一个字节用于存储字段的长度(0-255),以及字符的剩余n字节。这就是为什么你经常看到VARCHAR(255)

如果字段永远不会超过12,请使用VARCHAR(12)

答案 2 :(得分:2)

我认为最初的问题是,对于某些系统,VARCHAR(...)被限制为255,因为当你使用一个字节来编码实际长度时,你只能表达长度达到255的长度。

VARCHAR(16)/ VARCHAR(15)它很可能让人想起这些起源,但这两个值没有什么特别之处。