为什么VARCHAR需要长度规格?

Fix*_*int 54 sql database varchar

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

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

Rob*_*Day 34

VARCHAR的"长度"不是内容的长度,而是内容的最大长度.

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

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

  • 为什么VARCHAR默认不是指VARCHAR(MAX)?INT有默认大小,为什么VARCHAR没有默认大小?创建SQL标准时,这个设计决策背后的原因是什么? (6认同)
  • 创建 SQL Server 标准时,VARCHAR(MAX) 不存在。它是 varchar(8000) 或文本。 (2认同)
  • VARCHAR(MAX)的处理与引擎盖下的VARCHAR(8000)(最大的非max类型)不同。请仅在确实需要时使用VARCHAR(MAX),否则会影响性能。https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac (2认同)

Ode*_*ded 13

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

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

  • 没错,在SQL Server中不定义大小时要小心,因为根据场景默认为不同的东西,例如http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without -size.html (3认同)
  • “当数据定义或变量声明语句中未指定 n 时,默认长度为 1。当使用 CAST 和 CONVERT 函数时未指定 n 时,默认长度为 30。” 从提到的链接 (2认同)

a_h*_*ame 7

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


Vip*_*ain 7

有可能的性能impact:在MySQL,temporary tablesMEMORY tables存储VARCHAR列一个固定长度列,填补了它的最大长度。

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

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