database - 为什么 SQL 字段长度总是 (2^n)-1 除非小于 127?

标签 database schema varchar

很多数据库模式似乎都遵循以下标准:

(2^n)-1 对于大字段:

varchar(511)
varchar(255)
varchar(127)

...然后 (2^n) 对于较小的

varchar(64)
varchar(32)
varchar(16)
varchar(8)

我明白为什么使用 (2^n)-1 的数字,我不明白的是为什么没有必要将趋势继续向下到小字段。

例如

varchar(63)
varchar(31)
varchar(15)
varchar(7)

这是有原因的还是仅仅是返回减少太多?

最佳答案

我记得过去,使用 2^n 长度更适合磁盘或内存上的 block 对齐。 对齐 block 更快。 今天“ block ”的大小更大,内存和磁盘的速度足以忽略对齐, 除了非常大的 block 。 (无论“非常大”在今天意味着什么......)

如今,这样做只是一种传统。

我成为这句名言的另一个原因是: 只有 10 种人:会二进制的和其他。

而 2^n -1 是梅森素数的候选者。所以它也很怪异......

关于database - 为什么 SQL 字段长度总是 (2^n)-1 除非小于 127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571212/

相关文章:

基于 jquery 的 xml 编辑器,使用 xml 模式

sql-server - 当所需长度 <8000 时,TEXT 比 varchar 有什么优势?

MySQL 错误 #1071 - 指定的键太长;最大 key 长度为 767 字节

database - 非常宽的非规范化数据(大约 40000 列)。使用哪个数据库?

java - 使用多个数据库模式的 JPA

java - XML schema 可以在单个 complexType 中有多个选择?

mysql - Varchar 上的索引是否会产生性能差异?

java - 存储所有排列的模式数据库

mysql - 禁用 MySQL 错误消息

database - 分析 Mautic 数据库模式