为什么 VARCHAR 需要长度规范?

为什么我们总是需要指定 VARCHAR(length)而不仅仅是 VARCHAR? 它是动态的。

UPD: 我特别困惑的是它是强制性的(例如在 MySQL 中)。

55869 次浏览

首先,在所有数据库中都不需要它,看看 SQL Server,它是可选的。

不管怎样,它定义了字段内容的最大大小。这本身并不是一件坏事,而且它传达了意义(例如,电话号码,在这个领域你不想要国际号码)。

来自 维基百科:

Varchar 油田可以是任何规模的 极限。极限与 类型的数据库,一个 Oracle 9i 数据库的字节数限制为4000字节 MySQL 数据库的限制是65,535 字节(对于整个行)和 Microsoft SQL Server 20058000字节 (除非使用 varchar (max) 最大存储容量为 2,147,483,648字节)。

VARCHAR 的“长度”不是内容的长度,而是内容的最大长度。

VARCHAR 的最大长度不是动态的,它是固定的,因此必须指定。

如果不想为它定义最大大小,那么可以使用 VARCHAR (MAX)。

数据库对其存储的数据了解得越多,它在使用请求搜索/添加/更新数据时就能进行越多的优化。

答案是你 不要需要,它是可选的。

如果您想确保字符串不超过一定的长度,那么它就在那里。

您可以将其视为对数据的约束。它确保不存储违反约束的数据。它在概念上类似于对整数列的检查约束,确保只输入正值。

正如@DimaFomin 在评论中指出的那样,对于程序员来说,最危险的事情是强制使用 默认长度,如果没有指定长度的话。

SQLServer 如何强制执行默认长度:

declare @v varchar = '123'
select @v

结果:

1