我进行了阅读,但并没有完全理解...
为了简化这个问题,我想要...
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是否为@temp保留了4001个字节,其中(从@temp的4001个字节中的其余4000个字节)在@temp被处理之前不能用于任何其他目的?
如果不是这样,那么:
- SQL Server为什么需要知道varchar值的最大大小? - 为什么不能将大小超过4001字节的字符串(重新)分配给@temp? - SQL Server如何使用这个大小?
在一个包含一个varchar(4001)列的表中,如何命名varchar(4001)以避免与varchar(max)引起歧义?例如,避免使用“maximum”词汇。
[1]表明它是列的大小: " varchar数据类型是可变长度数据类型。比列的大小短的值..."
那么一个varchar(4001)列的大小是多少,使用[1]中的术语来说是什么?
更新: 我想(通过指定4001)避免偏离本文所述的主题(例如SQL Server varchar(max)、text等类型)以及其他未在此处具体要求的主题。
这些问题并不是关于如何使用varchar(n),而是关于它如何被SQL Server使用。
欢迎其他DBMS专家,因为这应该是DBMS无关的问题,尽管在SQL Server 2000(或2005+没有varchar(MAX)时)的上下文中指定了具体数字。
更新2: 根据[2],存储表数据的长度前缀大小始终为2。为什么不只使用varchar()让SQL Server处理实际大小?此外,我(故意)基于变量提出我的问题。此外,实际上放入数字会截断存储/数据。
DECLARE @temp VARCHAR(2);
SET @temp = 'aaaaaa';
select @temp
-- result is: aa
[1]
msdn "使用 char 和 varchar 数据"
http://msdn.microsoft.com/zh-cn/library/ms175055.aspx
[2]
估算堆的大小
http://msdn.microsoft.com/zh-cn/library/ms189124.aspx