varchar(5)和varchar(5000)之间的区别?

时间:2012-01-27 12:02:03

标签: sql-server

  

可能重复:
  is there an advantage to varchar(500) over varchar(8000)?

在SQL Server中,我们可以指定字段类型varchar(n)

  

存储大小是输入数据的实际长度(以字节为单位),而不是n   字节。

通常在规划数据库结构时,我会尝试想象存储在这些varchar字段中的字符串的最大可能长度,然后设置想象的大小+ varchar字段的一些备份。有时可能会发生最初提供的空间不足以进行现场,然后我需要增加长度。

但实际上,是否值得将varchar字段限制为某个值,而不只是设置varchar(5000)甚至varchar(max)这样的情况会100%适合这种情况?当我限制n长度?

时,SQL Server或索引组织中的页面组织是否有任何优势?

更新

这就是我的意思(优势):https://stackoverflow.com/a/5353196/355264

  

是的,如果你的话,查询优化器可以猜出页面中有多少行   有很多大于必要的varchar字段,SQL   服务器可以在内部猜出错误的行数。

以上是真的吗?还有其他优势吗?

2 个答案:

答案 0 :(得分:19)

首先,您不能索引任何超过900字节的列。

单独(对我而言)是一直反对使用varchar(5000)(或varchar(max))的杀手标准,即使不需要......

使用合适的尺寸。

另外:varchar添加至少2个字节的开销,因此对于10个字符或更少字符串的字符串,我总是建议使用char(n)代替。

char(5)将使用5个字节的存储空间。 varchar(5)使用2到7个字节的存储空间。

答案 1 :(得分:15)

MS SQL Server存储varchar(8000)并且与varchar(MAX)不同。

  

MAX类型从表的数据页移出的大小   如果[大值。现在固定在自己的数据页面8,000字节   行外的类型]设置为OFF。

     

使用varchar(n)而不是varchar(MAX)

有几个原因

<强>性能

varchar(n)更快 http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

<强>索引

可以索引

varchar(900)和更小,但不能varchar(MAX)或varchar(901)或更大

<强>兼容性

MS SQL Server Compact Edition不支持varchar(MAX)