您经常看到数据库字段设置为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个字符,可以 Select 使用单个字节来指示字段中数据的长度.如果限制为256或更大,则需要两个字节.

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

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

Sql相关问答推荐

即使缺少某些行,如何查找特定窗口期的平均销售额

如何解决Error:operator is not unique:unknown—unknown在一个动态SQL查询?""""

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

Stack Exchange站点上的最短帖子(按正文长度计算,用户名为原始发帖(SEDE))

如何根据特定的内部json元素值过滤postgres查询结果?

PostgreSQL基于2个COLS的任意组合 Select 唯一行

Django将字符串筛选为整数?

BigQuery-当子查询不返回任何结果时,所有结果为零

如何计算一个用户S的日常连胜?

如何从查询中的三个或更多个表中添加另一个相同的列?

SQL Athena/prest判断值是否在嵌套的json数组中

如何使子查询在UPDATE语句期间获得最新更新

使用 SQL 将列添加到 Access 数据库时出错

从另一个没有公共键的表中获取值来加入

在presto sql中解析带有区域的时间格式

删除重复记录但保留最新的SQL查询

Oracle SQL 从多个条件中 Select 但具有相同的 id

如何对 SQL 表中的连续时间戳进行分组?

将单行中的多个行值转换为列

ACCESS SQL - 有没有办法使用通配符仅 Select 字段的特定部分?