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字节,如果[大值
“行外类型]设置为“关闭”
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。