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

net*_*rog 16 sql-server

可能重复:
varchar(500)优于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 Server可以在内部猜测错误的行数.

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

mar*_*c_s 19

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

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

使用合适的尺寸.

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

char(5)将使用5个字节的存储 - 总是.varchar(5)使用2到7个字节的存储空间.

  • 实际上`varchar(15)`在效率和速度方面与`varchar(500)`相同,对吧?即如果我认为数据大约是15-20个字节(可能更少或更长一点),我可以指定`varchar(150)`?这实际上是我的主要问题. (3认同)

Jeo*_*uan 15

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

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

使用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)