sql server中varchar(500)与varchar(max)之间的区别

时间:2010-09-10 07:12:27

标签: sql sql-server

我想知道在使用varchar(500)和varchar(max)时在性能,内存和其他任何需要考虑的方面有什么利弊?

  • 两者都会使用相同数量的存储空间吗?

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

2 个答案:

答案 0 :(得分:31)

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

要在单个列中存储更多数据,您需要使用TEXT,NTEXT或IMAGE数据类型(BLOB),这些数据类型存储在8 KB数据页的集合中,这些数据页与存储其他数据页的数据页分开同一个表中的数据。这些数据页以B树结构排列。 BLOB难以使用和操作。它们不能用作过程或函数中的变量,也不能在REPLACE,CHARINDEX或SUBSTRING等字符串函数中使用。在大多数情况下,您必须使用READTEXT,WRITETEXT和UPDATETEXT命令来操作BLOB。

为了解决这个问题,Microsoft在SQL Server 2005中引入了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些数据类型可以保存BLOB可以容纳的相同数量的数据(2 GB)它们存储在用于其他数据类型的相同类型的数据页中。当MAX数据类型的数据超过8 KB时,使用溢出页面。 SQL Server 2005自动为页面分配溢出指示器,并且知道如何操纵数据行的方式与操作其他数据类型的方式相同。您可以在存储过程或函数内声明MAX数据类型的变量,甚至将它们作为变量传递。您也可以在字符串函数中使用它们。

Microsoft建议在SQL Server 2005中使用MAX数据类型而不是BLOB。实际上,在SQL Server的未来版本中不推荐使用BLOB。

信用:http://www.teratrax.com/articles/varchar_max.html


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

非常有趣的读物:http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

参考:http://msdn.microsoft.com/en-us/library/ms143432.aspx

答案 1 :(得分:4)

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