40个字符的字符串:如果我使用VARCHAR(4000)而不是VARCHAR(40)会有所不同吗?

时间:2016-08-22 04:40:36

标签: sql-server tsql

在我的SP中,我需要使用最多40个字符的字符串。

如果我使用VARCHAR(4000)代替VARCHAR(40)会不会产生影响?

更新

我问这个问题的原因是,根据我的理解,VARCHAR(4000)VARCHAR(40)变量的内存使用情况是相同的。我想弄清楚为什么我应该将自己限制在VARCHAR(40)变量?为什么不VARCHAR(4000)?是因为性能还是内存效率?

更新2,重要假设:

我假设当我们将字符串“Hello World”存储在具有VARCHAR(4000)VARCHAR(40)类型的变量中时,它需要相同的内存量。我是对的吗?

1 个答案:

答案 0 :(得分:4)

从性能或内存消耗的角度来看,将变量声明为VARCHAR(40)VARCHAR(4000)在运行时的行为相同。但是存在一个重要的行为差异:VARCHAR(40)可以默默地将值截断为40长度。这就是为什么最好将VARCHAR(8000)用于变量(或NVARCHAR(4000)),以避免出现静默截断的风险。不要使用VARCHAR(MAX),除非值为MAX,因为MAX类型在运行时的行为方式不同。