我做了红色阅读本,无法清楚地了解...为什么在varchar(n)中将n指定为具体数字?
有(缩短这个问题的目的)
DECLARE @temp VARCHAR(4001);
--update: 4001 is for example only to avoid varchar(MAX) discussions
-- I am aware about 8000
SET @temp = 'a';
做的SQL Server 4001个的储备字节@temp其中(从@temp的4001个字节剩余的4000个)在@temp处置之前不能被重复用于任何其他目的?
如果它不那么
(更新:对不起,这是修辞的问题,我认为这并没有改变我的问题的意义上):
- 为什么SQL服务器需要知道的最大尺寸varchar值?
- 为什么不能将大于4001字节的字符串重新分配给@temp?
更新:如果4001字节未预先分配或为@temp保留 - SQL Server如何使用此大小?
关于包含一个varchar(4001)列的表的相同问题。
我应该如何在varchar(4001)中命名4001以避免varchar(max)带来的歧义?
即避免接触“最大”字。
[1],例如,暗示它是柱尺寸:
VARCHAR数据类型为可变长度的数据类型。值比尺寸列短... [1]
我可能理解这个大小被保留,列具有固定大小(所有行),独立地更短的值存储在那里。
正确吗?如果不正确,
使用[1]中的术语,varchar(4001)列的大小是多少?
更新
我想(通过指定4001),以避免从行值存储偏离这个主题(来,为前,SQL Server的VARCHAR(最大值),文本等类型),以及以其他主题在这里没有具体问到。
这些问题不是关于如何在varchar(n)中使用n,而是如何使用它(由SQL Server)。
我欢迎其他DBMS的专家,因为它应该是DBМS无关的问题,但具体数字是在SQL Server 2000的范围内指定的(或不2005+ VARCHAR(MAX))
UPDATE2:
的根据[2],用于在SQL Server中存储表数据的长度前缀大小始终为2。 为什么不只是使用varchar()让SQL Server以实际大小工作呢?
除了我(故意)基于我的问题变量。
此外,把数字确实截断存储/数据:
DECLARE @temp VARCHAR(2);
SET @temp = 'aaaaaa';
select @temp
-- result is: aa
[1]
MSDN “使用char和varchar数据”
http://msdn.microsoft.com/en-us/library/ms175055.aspx
[2]
估计堆
的大小 http://msdn.microsoft.com/en-us/library/ms189124.aspx
不幸的是,“[为什么不使用] varchar(max)无处不在?”问题没有任何明确的答案,只是一堆猜测。有没有人对SQL Server有明确的答案? – Gabe 2010-10-16 18:00:36