为什么VARCHAR需要长度规格?

时间:2010-07-01 10:11:09

标签: sql database varchar

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

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

8 个答案:

答案 0 :(得分:30)

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

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

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

答案 1 :(得分:12)

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

无论如何,它定义了字段内容的最大大小。这本身并不坏,它传达了意义(例如 - 电话号码,您不希望在该领域使用国际号码)。

答案 2 :(得分:6)

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

答案 3 :(得分:4)

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

如果您设计的VARCHAR列比您需要的最大尺寸大,那么您将消耗更多内存。这会影响cache efficiency, sorting speed等。

所以你给出字符串下面的最大长度。就像你最大字符10的长度所以不要给他的长度100或更多。

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

来自Wikipedia

  

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

答案 7 :(得分:0)

@DimaFomin在注释中指出,对程序员来说最危险的事情是,如果未指定长度,则强制使用默认长度

SQL Server如何实施默认长度:

declare @v varchar = '123'
select @v

结果:

1