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

varchar(255)

考虑到空字节,not an indexer是保留容量,not an indexer是保留容量?

大概varchar(0)是个无稽之谈(容量为零)?在这种情况下,2^8的空间应该是256?

是否还有其他幅度可以提供性能优势?例如,varchar(512)的性能是否比varchar(511)或varchar(510)低?

所有新旧关系数据库的值是否相同?

disclaimer-我是一名开发人员而不是DBA,我在已知的情况下使用适合我的业务逻辑的字段大小和类型,但我想知道这种偏好的historic个原因,即使它不再相关(但如果仍然相关,则更重要).

编辑:

感谢您的回答,似乎有一些共识,一个字节用于存储大小,但这并没有在我的脑海中最终解决这个问题.

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

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

在这两种情况下,这似乎是一个微妙的问题,可能取决于数据库的实现.使用255的做法似乎相当普遍,所以一开始肯定有人在某个地方提出了一个很好的理由,有人记得这个理由是什么吗?程序员不会无缘无故地采用任何新的实践,这肯定是新的一次.

推荐答案

DBMS的最大长度为255个字符,可以选择使用单个字节来指示字段中数据的长度.如果限制为256或更大,则需要两个字节.

长度为零的值肯定对varchar个数据有效(除非另有限制).大多数系统将此类空字符串视为与NULL不同的字符串,但一些系统(尤其是Oracle)将空字符串视为与NULL相同的字符串.对于空字符串不为NULL的系统,需要在行中的某个位置添加一位,以指示该值是否应被视为NULL.

正如您所注意到的,这是一个历史优化,可能与当今大多数系统无关.

Sql相关问答推荐

列更新 - SQL UPDATE 语句

PostgresQL查询以计算一天内的时间间隔

SQL Join 与 SUM 和 Group By

如何使用 group by 检索不同的数据

如何使用联合 sql 从第二次选择中删除重复项

如何在此 SQL 查询中使用 WHERE 子句?

为什么这个转换为 DATETIME2?

根据示例结束日期和季度编号计算季度日期

搜索数据库中包含特定列的所有表

Postgres 大表 Select Query With In 子句的最优索引选择

dateadd 函数snowflake中的变量

根据其他记录更新记录

什么是 DDL 和 DML?

如何在带有“时间”字段的 postgresql 中按小时分组?

如何在 SQL Server 中生成 Guid?

Postgresql中的`->>`和`->`有什么区别?

从表中选择多个列,但按一个分组

Postgresql 表存在,但查询时得到“关系不存在”

Sequelize ORM中连接表的条件

如何选择表格中除一列以外的所有列?