为什么VARCHAR需要长度规格?

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

UPD:我很困惑,因为它是强制性的(例如在MySQL中)。

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

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

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

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

无论如何,它定义了字段内容的最大大小。 这本身并不是一件坏事,它传达的意义(例如 – 电话号码,你不希望国际号码在这个领域)。

您可以将其视为对数据的限制。 它确保您不会存储违反约束条件的数据。 它在概念上类似于例如整数列上的检查约束,以确保只input正值。

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

这可能impact性能impact :在MySQL中, temporary tablesMEMORY tablesVARCHAR列存储为固定长度的列,填充为最大长度。

如果你devise的VARCHAR列比你所需要的最大的尺寸大得多,你会消耗更多的内存。 这会影响cache efficiency, sorting speed

所以你给你的弦下的最大长度来。 就像你最大长度的字符10,所以不要给他的长度100或更多。

维基百科 :

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

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

如果你想确保string不超过一定的长度,那就在那里。