关于使用NVARCHAR(MAX)

时间:2013-02-15 10:44:32

标签: sql-server-2012

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

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

2 个答案:

答案 0 :(得分:5)

您是否知道无法索引nvarchar(max)类型的列?因此,您将无法优化此列的查询。没有规模影响,同意,但潜在的性能影响肯定。

另请注意,在一定大小后,列将存储在行外,因此获取它将添加额外的性能。

如果您担心在插入时遇到错误,通常的解决方案是:

  1. 验证客户端
  2. 修剪字符串
  3. 这是一个在更多detail中讨论此问题的问题。

答案 1 :(得分:2)

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

  

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

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