您经常看到数据库字段设置为255个字符,传统/历史原因是什么?我认为这与分页/内存限制和性能有关,但255和256之间的区别总是让我感到困惑。
varchar(255)
考虑到这是一个容量或大小,而不是一个索引器,为什么255比256更好?是一个保留用于某种目的的字节(终止符或null或其他)?
假设varchar(0)是胡说八道(容量为零)?在哪种情况下,2^8的空间应该是256?
还有没有其他提供性能优势的级别?例如,varchar(512)的性能是否不如varchar(511)或varchar(510)?
这个值对于所有关系数据库,无论是旧的还是新的都是一样的吗?
免责声明-我是开发人员而不是数据库管理员,我使用适合我的业务逻辑的字段大小和类型,但我想知道这种偏好的历史原因,即使它不再相关(但如果它仍然相关,就更多)。
编辑:
感谢你的回答,似乎有一些共识认为字节是用来存储大小的,但这并没有在我的脑海中解决这个问题。
如果元数据(字符串长度)存储在相同的连续内存/磁盘中,这就有一定的意义。1字节的元数据和255字节的字符串数据将非常适合彼此,并适合256个连续字节的存储,这可能是整洁和整洁的。
But...If元数据(字符串长度)与实际的字符串数据(可能在主表中)分开存储,然后将字符串数据的长度限制为一个字节,因为只存储1字节整数的元数据看起来有点奇怪。
在这两种情况下,这似乎是一个可能取决于DB实现的微妙之处。使用255的做法似乎相当普遍,所以一定有人在一开始就为它争论了一个很好的案例,有人能记得那个案例是什么吗?程序员不会无缘无故地采用任何新的实践,而且这一定是新的一次。
发布于 2010-02-26 17:44:34
在最大长度为255个字符的情况下,DBMS可以选择使用单个字节来指示字段中数据的长度。如果限制为256或更大,则需要两个字节。
长度为零的值对于varchar
数据当然是有效的(除非另有约束)。大多数系统将这样的空字符串视为与NULL不同,但某些系统(特别是Oracle)将空字符串视为与NULL相同。对于空字符串不为NULL的系统,需要在行中的某个位置添加一个位,以指示是否应将该值视为NULL。
正如您所注意到的,这是历史上的优化,可能与当今的大多数系统无关。
发布于 2010-02-26 17:47:10
发布于 2010-02-26 17:43:31
255是可以存储在单字节无符号整数中的最大数值(假设是8位字节)-因此,出于某种目的存储字符串长度的应用程序更喜欢255而不是256,因为这意味着它们只需要为"size“变量分配一个字节。
https://stackoverflow.com/questions/2340639
复制相似问题