是否有一个很好的理由,我经常使用VARCHAR(255)(而不是另一个长度)?

在多个课程,书籍和作业中,我已经将文本字段定义为VARCHAR(255)作为“短文本”的默认types。 有没有什么好的理由,经常select255的长度,除了是一个不错的回合数 ? 是不是有一个很好的理由(过去是否适用)过去的一段时间呢?

当然,我意识到,如果你知道string的最大长度,更严格的限制会更理想。 但是,如果您使用的VARCHAR(255)可能表示您不知道最大长度,只是它是一个“短”string。


注意:我发现这个问题( varchar(255)v tinyblob v tinytext ),它表示VARCHAR( n )在n <= 255时需要n + 1个字节的存储空间, n > 255时需要n + 2个字节的存储空间。 这是唯一的原因吗? 这似乎是任意的,因为你只会比VARCHAR(256)节省两个字节,并且可以通过声明VARCHAR(253)来轻松地保存另外两个字节。

历史上,在一些DBMS中,255个字符通常是VARCHAR的最大长度,如果你想使用UTF-8并且索引列(由于索引长度的限制),它有时仍然是有效的最大值。

使用255是因为它是可以用8位数字计数的最大字符数。 它最大限度地利用了8位计数,而不需要另外的整个字节来计算255以上的字符。

当以这种方式使用时,VarChar只使用字节数+ 1来存储文本,所以你可以把它设置为255,除非你想要对字段中的字符数进行硬限制(比如50)。

可能是因为SQL Server和Sybase(我熟悉的两个)在VARCHAR列中的字符数中最多有255个字符。 对于SQL Server,这在1996/1997版本的7版本中有所变化…但是旧习惯有时会很难。

我要回答这个字面问题: ,没有什么理由让你经常使用VARCHAR(255)(其他的答案确实有其他原因 ,只是不太好)。 因为架构师select了VARCHAR(300)而不是VARCHAR(255),所以您不会find很多灾难性故障项目的示例。 即使你在谈论CHAR而不是VARCHAR,这也是一个几乎完全没有意义的问题。

注意:我发现这个问题(varchar(255)v tinyblob v tinytext),它表示VARCHAR(n)需要n + 1个字节的存储空间用于n <= 255,n + 2个字节的存储空间用于n> 255。 这是唯一的原因吗? 这似乎是任意的,因为你只会比VARCHAR(256)节省两个字节,并且可以通过声明VARCHAR(253)来轻松地保存另外两个字节。

不,你不能通过声明253来保存两个字节。varchar的实现很可能是一个长度计数器和一个可变长度的非终结数组。 这意味着如果将“hello”存储在varchar(255)中,则将占用6个字节:长度(数字5)为一个字节,五个字母为5个字节。

当你说2^8你得到256 ,但是计算机中的数字是从0开始的。 那么,你有了255 ,你可以在IP掩码中或者在IP本身中探测它。

255是8位整数的最大值: 11111111 = 255

这有帮助吗?

一个无符号的1字节数可以包含范围[0-255]。 所以当你看到255的时候,主要是因为程序员认为在10基础上(弄笑话)?

实际上,有一段时间,255是你在MySQL中可以提供VARCHAR的最大规模,并且在带有索引和其他问题的TEXT上使用VARCHAR是有好处的。

在许多应用程序中,如MsOffice(直到版本2000或2002),每个单元的最大字符数为255.从能够处理每个字段的超过255个字符的程序的数据移动到这些应用程序/从这些应用程序移动数据是一场噩梦。 目前,限制越来越less。