为何VARCHAR需要长度说明?

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

UPD:我对此感到特别困惑,因为它是强制性的(例如在MySQL中)。

Fixpoint asked 2020-01-13T08:42:54Z
7个解决方案
33 votes

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

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

如果您不想为其定义最大大小,请使用VARCHAR(MAX)。

Robin Day answered 2020-01-13T08:43:25Z
13 votes

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

无论如何,它为字段内容定义了最大大小。 本身不是一件坏事,它传达了含义(例如,电话号码,您不希望在该领域使用国际号码)。

Oded answered 2020-01-13T08:43:50Z
7 votes

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

a_horse_with_no_name answered 2020-01-13T08:44:11Z
4 votes

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

Tom Gullen answered 2020-01-13T08:44:31Z
4 votes

可能有性能VARCHAR:在MySQL中,cache efficiency, sorting speedMEMORY tablesVARCHAR列存储为固定长度列,并填充为其最大长度。

如果您设计的VARCHAR列比所需的最大大小大得多,则会消耗更多的内存。 这会影响cache efficiency, sorting speed等。

因此,您给出了字符串下的最大长度。 例如,如果您将角色的最大长度设为10,那么不要给他的长度超过100。

Vipin Jain answered 2020-01-13T08:45:00Z
3 votes

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

如果要确保字符串不超过特定长度,就可以在该处进行。

NibblyPig answered 2020-01-13T08:45:25Z
1 votes

从维基百科:

Varchar字段可以是任意大小   到极限。 限制与   数据库类型,Oracle 9i   数据库的限制为4000个字节,   MySQL数据库的限制为65,535   字节(用于整行)和   Microsoft SQL Server 2005 8000字节   (除非使用varchar(max),否则   最大存储容量为   2,147,483,648字节)。

Luca Matteis answered 2020-01-13T08:45:50Z
translate from https://stackoverflow.com:/questions/3156815/why-does-varchar-need-length-specification