可能重复:
Are there any disadvantages to always using nvarchar(MAX)?
通过选择'ntext'作为列类型而不是包含字符但具有有限的最大大小(如'char'或'varchar')的类型,是否存在一般性缺点?
我不确定有限的列大小是否适用于我的所有列。因此,我会对包含文本的所有列使用'ntext'。这可能导致将来出现问题吗?
(我在ASP.net Webforms应用程序中使用Linq-To-SQL)
答案 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类型仍然存在局限性。
您是否计划只拥有非唯一文字列?或者从不打算搜索它们?