2010-07-01 434 views
37

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

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

+2

可能的重复http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 – 2010-07-01 11:34:17

+0

谢谢,这个真的是重复的。 – Fixpoint 2010-07-02 08:11:15

回答

10

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

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

+3

确实,在未定义SQL Server中的大小时要小心,因为根据场景的不同,默认情况会有所不同。 http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev 2010-07-01 10:19:00

+0

“当在数据定义或变量声明语句中未指定n时,默认长度为1 。当使用CAST和CONVERT函数时未指定n时,默认长度为30.“从提到的链接 – 2018-01-31 12:45:16

1

Wikipedia

VARCHAR字段可以是任何规模达 发挥到极致。该限制从 类型的数据库不同,在Oracle 9i中 的数据库有4000个字节的限制,一个 MySQL数据库为65,535 字节的限制(整行)和 微软SQL Server 2005的8000个字节 (除非VARCHAR (max),其中 具有最大存储容量 2,147,483,648字节)。

24

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

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

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

+3

为什么VARCHAR在默认情况下表示VARCHAR(MAX)? INT具有默认大小,所以为什么VARCHAR不能具有默认大小?当创建SQL标准时,这个设计决定背后的原因是什么? – Fixpoint 2010-07-02 08:08:26

+1

当创建SQL Server标准时,VARCHAR(MAX)不存在。它是varchar(8000)或文本。 – 2010-07-02 08:31:52

+0

VARCHAR(MAX)的处理方式与VARCHAR(8000)(最大的非最大类型)不同。请仅在需要时使用VARCHAR(MAX),否则性能将受损。 https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox 2017-09-18 20:55:05

3

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

+4

它可以根据varchar max进行哪些优化长度,例如? – Fixpoint 2010-07-01 11:12:52

1

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

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

5

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

2

有可能的性能impact:在MySQL,temporary tablesMEMORY tables商店VARCHAR柱为固定长度列,填补了它的最大长度。

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

因此,您给出了字符串下的最大长度。就像如果你最大长度的字符10,所以不要给他的长度100或更多。

相关问题