sql server中varchar(500)与varchar(max)之间的差异 我想知道在使用VARCHAR(500)vs VARCHAR(MAX)时,在性能、内存和其他方面考虑什么是利弊, 两者是否使用相同的存储空间

sql server中varchar(500)与varchar(max)之间的差异 我想知道在使用VARCHAR(500)vs VARCHAR(MAX)时,在性能、内存和其他方面考虑什么是利弊, 两者是否使用相同的存储空间,sql,sql-server,Sql,Sql Server,sql server 2000/2005/2008的答案是否不同?在sql server 2000和sql server 7中,一行的大小不能超过8000字节。这意味着VARBINARY列只能存储8000个字节(假设它是表中唯一的列),VARCHAR列最多可以存储8000个字符,NVARCHAR列最多可以存储4000个字符(每个unicode字符2个字节)。此限制源于SQL Server用于将数据保存到磁盘的8 KB内部页面大小 要在单个列中存储更多数据,需要使用文本、NTEXT或图像数据类型(

sql server 2000/2005/2008的答案是否不同?

在sql server 2000和sql server 7中,一行的大小不能超过8000字节。这意味着VARBINARY列只能存储8000个字节(假设它是表中唯一的列),VARCHAR列最多可以存储8000个字符,NVARCHAR列最多可以存储4000个字符(每个unicode字符2个字节)。此限制源于SQL Server用于将数据保存到磁盘的8 KB内部页面大小

要在单个列中存储更多数据,需要使用文本、NTEXT或图像数据类型(blob),这些数据类型存储在8kb的数据页集合中,这些数据页与在同一表中存储其他数据的数据页分开。这些数据页以B树结构排列。水滴很难处理和操纵。它们不能在过程或函数中用作变量,也不能在字符串函数(如REPLACE、CHARINDEX或SUBSTRING)中使用。在大多数情况下,必须使用READTEXT、WRITETEXT和UPDATETEXT命令来处理blob

为了解决这个问题,微软在SQLServer2005中引入了VARCHAR(MAX)、NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些数据类型可以保存与blob相同数量的数据(2GB),并且它们存储在用于其他数据类型的相同类型的数据页中。当MAX数据类型中的数据超过8 KB时,将使用溢出页面。SQLServer2005会自动为页面分配溢出指示器,并知道如何像处理其他数据类型一样处理数据行。您可以在存储过程或函数中声明MAX数据类型的变量,甚至可以将它们作为变量传递。也可以在字符串函数中使用它们

Microsoft建议在SQLServer2005中使用MAX数据类型而不是BLOB。事实上,在SQL Server的未来版本中,BLOB正在被弃用

学分:


在SQL Server2005和SQL Server2008中,VARCHAR的最大存储大小(MAX)为2^31-1字节(2147483647字节或2GB-1字节)。存储大小是输入的数据的实际长度+2字节。输入的数据长度可以是0个字符。由于VARCHAR数据类型中的每个字符使用一个字节,因此VARCHAR(MAX)数据类型的最大长度为2147483645

为您阅读全文:


参考:

A
VARCHAR(MAX)
列将接受501个或更多字符的值,而
VARCHAR(500)
列将不接受。因此,如果您有一个将值限制为500个字符的业务规则,
VARCHAR(500)
将更合适。

我要补充的唯一一点是对2000个限制的进一步评论——上面暗示了这一点——如果您有多个VARCHAR列,它们的组合长度不能超过8000同意Paul的观点,另一点是,在varchar(500)的情况下是自动约束长度的,而在varchar(max)的情况下不是。所以塔特也很好。还有一件事,sql server在插入记录时使用varchar(500)或varchar(max)来分配内存,而我们只需要500个字符来存储记录,这会有帮助吗?@lakhlaniprashant(OP):MSDN cleary声明“当列数据项的大小变化很大,并且大小可能超过8000字节时,使用varchar(max)”这里:所以,除非你真的需要,否则不要这样做。这篇博文请看以下链接: