Sql server varchar(5)和varchar(5000)之间的差异?

Sql server varchar(5)和varchar(5000)之间的差异?,sql-server,Sql Server,可能重复: 在SQL Server中,我们可以指定字段类型varchar(n): 存储大小是输入数据的实际长度(字节),而不是n 字节 通常在规划数据库结构时,我会尝试想象存储在这些varchar字段中的字符串的最大可能长度,然后为varchar字段设置想象的大小+一些备份。有时可能会出现最初提供的房间不够场地的情况,然后我需要增加长度 但实际上,是否值得将varchar字段限制为某个值,而不只是设置像varchar(5000)或甚至varchar(max)这样的100%适合这种情况?当我限制

可能重复:

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

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

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

但实际上,是否值得将
varchar
字段限制为某个值,而不只是设置像
varchar(5000)
或甚至
varchar(max)
这样的100%适合这种情况?当我限制
n
长度时,SQL Server中的页面组织或索引组织是否有任何优势

更新

以下是我的意思(优点):

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


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

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

这一点(对我来说)是一个致命的标准,不允许一直使用
varchar(5000)
(或
varchar(max)
)即使不需要

使用合适的尺寸

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


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

MS SQL Server存储varchar(8000)和更短的空间,与varchar(MAX)的存储空间不同

将最大类型移出表的数据页和 它自己的数据页现在固定为8000字节,如果[大值 “行外类型]设置为“关闭”

使用varchar(n)而不是varchar(MAX)有几个原因

性能

varchar(n)更快

索引编制

可以索引varchar(900)和更小的文件,但不能索引varchar(MAX)或varchar(901)或更大的文件

兼容性


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

可能与您的编辑重复。所以实际上
varchar(15)
在效率和速度方面与
varchar(500)
是一样的,对吗?也就是说,如果我认为数据大约是15-20字节(可能更少或更长一点),我可以指定
varchar(150)
?这其实是我的主要问题。我不明白“总是”。。。使用varchar(500)或varchar(max)之间的问题排除了任何关于字符串通常为10个字符或更少的建议。类型为
char(100)
的列的长度始终正好为100个字符-即使您仅在其中存储
Isaac
,也将填充到定义的长度(100个字符)使用空格-实际上您正在存储
Isaac
-这是非常低效的。列的填充取决于您是否已打开/关闭ANSI_padding。