可能重复:
is there an advantage to varchar(500) over varchar(8000)?
在SQL Server中,我们可以指定字段类型varchar(n)
:
存储大小是输入数据的实际长度(以字节为单位),而不是n 字节。
通常在规划数据库结构时,我会尝试想象存储在这些varchar
字段中的字符串的最大可能长度,然后设置想象的大小+ varchar
字段的一些备份。有时可能会发生最初提供的空间不足以进行现场,然后我需要增加长度。
但实际上,是否值得将varchar
字段限制为某个值,而不只是设置varchar(5000)
甚至varchar(max)
这样的情况会100%适合这种情况?当我限制n
长度?
更新
这就是我的意思(优势):https://stackoverflow.com/a/5353196/355264
是的,如果你的话,查询优化器可以猜出页面中有多少行 有很多大于必要的varchar字段,SQL 服务器可以在内部猜出错误的行数。
以上是真的吗?还有其他优势吗?
答案 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)