Sql server 2012 关于使用NVARCHAR(最大值)

Sql server 2012 关于使用NVARCHAR(最大值),sql-server-2012,Sql Server 2012,我有一个数据库,其中有很多字符串列。我应该使用NVARCHAR(MAX)还是将字符串限制在合理的最大值,例如NVARCHAR(100)等?我真正想知道的是,如果我将一列设置为NVARCHAR(MAX),并且该列的所有值都是100个字符或更少,那么我是否可以通过将该列设置为NVARCHAR(100)来节省空间 我知道spac不是这里唯一的问题,数据的“验证”也很重要,但我只是想问一下空间问题。它不会节省空间,因为nvarchar字段的大小取决于输入数据的大小,而不是字段定义。按照 存储大小(以字节

我有一个数据库,其中有很多字符串列。我应该使用NVARCHAR(MAX)还是将字符串限制在合理的最大值,例如NVARCHAR(100)等?我真正想知道的是,如果我将一列设置为NVARCHAR(MAX),并且该列的所有值都是100个字符或更少,那么我是否可以通过将该列设置为NVARCHAR(100)来节省空间


我知道spac不是这里唯一的问题,数据的“验证”也很重要,但我只是想问一下空间问题。

它不会节省空间,因为
nvarchar
字段的大小取决于输入数据的大小,而不是字段定义。按照

存储大小(以字节为单位)是输入数据的实际长度+2字节的两倍


设置大小限制的原因是为了验证数据是否为该大小或更小,因为这是逻辑数据模型规定的。

您知道不能为nvarchar(max)类型的列编制索引吗?因此,您将无法优化此列上的查询。没有尺寸影响,同意,但肯定有潜在的性能影响

还要注意的是,在达到一定大小后,列被存储在行外,因此获取它将增加额外的性能命中

如果您担心在插入时出错,一般的解决方案是:

  • 验证客户端
  • 修剪绳子

  • 这里有一个问题更详细地讨论了这一点

    您应该将列的长度限制为您要放入其中的数据的最大可能/合理(取决于具体情况)长度,以防止不正确的数据放入数据库。这个极限是什么取决于你;空间不应该是一个考虑因素。你提出了一个非常有道理的观点——我只是想知道空间问题。