您经常看到数据库字段设置为 255 个字符的大小,传统/历史原因是什么?我认为这与分页/内存限制和性能有关,但 255 和 256 之间的区别一直让我感到困惑。
varchar(255)
考虑到这是容量或量级, 而不是索引器 , 为什么 255 比 256 更受欢迎? 是否为某种目的保留了一个字节(终止符或空值之类的)?
大概 varchar(0) 是胡说八道(容量为零)?在哪种情况下 2^8 的空间肯定应该是 256?
是否有其他数量级可以提供性能优势?例如,varchar(512) 的性能是否低于 varchar(511) 或 varchar(510)?
对于所有新旧关系数据库,此值是否相同?
免责声明 - 我是一名开发人员而不是 DBA,我使用适合我的已知业务逻辑的字段大小和类型,但我想知道这种偏好的 历史 原因,即使它不再相关(但即使如果它仍然相关,则更多)。
感谢您的回答,似乎有一些共识是使用一个字节来存储大小,但这并没有在我心中明确解决这个问题。
如果元数据(字符串长度)存储在同一个连续的内存/磁盘中,这是有道理的。1 个字节的元数据和 255 个字节的字符串数据,非常适合彼此,并且适合 256 个连续字节的存储,这大概是整洁的。
但是…如果元数据(字符串长度)与实际字符串数据(可能在主表中)分开存储,那么将字符串数据的长度限制为一个字节,只是因为只存储一个字节整数更容易元数据似乎有点奇怪。
在这两种情况下,这似乎是一个微妙之处,可能取决于数据库的实现。使用 255 的做法似乎很普遍,所以一开始一定有人在某个地方为它争论过一个很好的案例,有人能记得那个案例是什么吗?程序员不会无缘无故地采用任何新的做法,而且这一定是新的。
最大长度为 255 个字符,DBMS 可以选择使用单个字节来表示字段中数据的长度。如果限制为 256 或更大,则需要两个字节。
长度为零的值肯定对varchar数据有效(除非另有约束)。大多数系统将此类空字符串视为与 NULL 不同,但某些系统(尤其是 Oracle)将空字符串视为与 NULL 相同。对于空字符串不为 NULL 的系统,需要在行中的某处添加一个位来指示该值是否应被视为 NULL。
varchar
正如您所注意到的,这是一个历史优化,可能与今天的大多数系统无关。