您经常看到数据库字段的大小设置为255个字符,传统的/历史的原因是什么?我认为这与分页/内存限制和性能有关,但255和256之间的区别一直困扰着我。

varchar(255)

考虑到这是容量或大小,而不是索引器,为什么首选255而不是256?字节是否为某些目的(终止符或null或其他)而保留?

想必varchar(0)是一个胡说八道(有零容量)?在哪种情况下2^8的空间应该是256 ?

是否存在其他提供性能好处的级别?例如,varchar(512)的性能是否低于varchar(511)或varchar(510)?

这个值是否适用于所有的关系数据库,无论是旧的还是新的?

免责声明-我是一个开发人员而不是一个DBA,我使用的字段大小和类型适合我的业务逻辑,但我想知道这种偏好的历史原因,即使它不再相关(但如果它仍然相关)。

编辑:

感谢你的回答,似乎有一些共识,字节是用来存储大小的,但这并不能确定地解决这个问题。

如果元数据(字符串长度)存储在相同的连续内存/磁盘中,这是有意义的。1字节的元数据和255字节的字符串数据将非常适合彼此,并适合256个连续字节的存储,这大概是整洁的。

但是…如果元数据(字符串长度)与实际的字符串数据分开存储(可能在主表中),那么仅仅因为存储1字节整数的元数据更容易,就将字符串数据的长度限制为1字节,这似乎有点奇怪。

在这两种情况下,这似乎都是一个微妙的问题,可能取决于DB实现。使用255的做法似乎很普遍,所以一开始肯定有人在某个地方提出了一个很好的例子,有人记得那个例子是什么吗?程序员不会无缘无故地采用任何新的实践,而这一定曾经是新的。


当前回答

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

其他回答

数据以二进制方式保存在内存中,0和1为二进制数字。一个字节(8位)可以容纳的最大二进制数是11111111,它转换为十进制255。

MySQL手册:

数据类型: VARCHAR (M), VARBINARY (M) 储存要求: 如果列值需要0 - 255字节,则为L + 1字节;如果值可能需要超过255字节,则为L + 2字节

理解并做出选择。

255的最大长度允许数据库引擎只使用1个字节来存储每个字段的长度。您是正确的,1字节的空间允许您存储2^8=256个不同的字符串长度值。

但是如果允许字段存储零长度的文本字符串,则需要能够在长度中存储零。因此,您可以允许256个不同的长度值,从0开始:0-255。

8位unsigned = 256字节

长度为255个字符+字节0

255是mySQL4和更早版本中的varchar限制。

255字符+空终止符= 256

或者1字节长度的描述符给出0-255个字符的可能范围