通过选择ntext作为所有文本列的数据类型是否存在缺点?

时间:2010-02-21 12:51:30

标签: asp.net database linq-to-sql sql-server-2008

  

可能重复:
  Are there any disadvantages to always using nvarchar(MAX)?

通过选择'ntext'作为列类型而不是包含字符但具有有限的最大大小(如'char'或'varchar')的类型,是否存在一般性缺点?

我不确定有限的列大小是否适用于我的所有列。因此,我会对包含文本的所有列使用'ntext'。这可能导致将来出现问题吗?

(我在ASP.net Webforms应用程序中使用Linq-To-SQL)

4 个答案:

答案 0 :(得分:5)

NTEXT一开始就被弃用,所以你应该使用NVARCHAR(MAX)。

您应该始终尝试使用列可能的最小数据类型。如果您确实需要在一个字段中支持超过4000个字符,那么您将需要使用NVARCHAR(MAX)。如果您不需要支持超过4000个字符,请使用NVARCHAR(n)。

我相信NTEXT总是存储在行外,在查询时会产生开销。如果可能,NVARCHAR(MAX)可以存储在行中。如果它不能适合行,那么SQL Server会将其推出行。请参阅this MSDN文章。

修改
对于NVARCHAR,支持的最大显式大小为4000.之后,您需要使用MAX,最多可达到2 ^ 31-1个字节。
对于VARCHAR,在需要切换到MAX之前,支持的最大显式大小为8000。

答案 1 :(得分:2)

除了AdaTheDev所说的,大多数标准T-SQL字符串函数不适用于NTEXT数据类型。使用VARCHAR(MAX)或NVARCHAR(MAX)会好得多。

答案 2 :(得分:2)

NVARCHAR还适用于宽带,例如非拉丁字母。

我有一个使用NVARCHAR参数运行的存储过程,当我将其更改为使用VARCHAR时,我的性能提高了一倍。

因此,如果您知道列中不需要扩展名,那么最好使用VARCHAR。

和其他答案一样,不要使用TEXT / NTEXT,它们已被弃用。

答案 3 :(得分:2)

任何文本列都不能有索引,因为索引限制为900字节。

无论如何都无法索引ntext,但新BLOB类型仍然存在局限性。

您是否计划只拥有非唯一文字列?或者从不打算搜索它们?