我应该将HTML存储为nvarchar(MAX)还是ntext?

12

我不知道如果选择nvarchar(MAX)是否存在字符数量限制,而且我也不确定我需要多少个字符。

这里应该使用什么标准数据类型?我正在使用 SQL Server 2008 R2。

3个回答

29

ntext 类型已经过时,textimage 也一样。微软建议分别使用 nvarchar(max)varchar(max)varbinary(max) 来替换它们。

因此,请使用 nvarchar(max)

参考:


7
使用nvarchar(MAX)的优点是可以在nvarchar(MAX)上运行Replace、Left、Len等函数,但不能在ntext上运行。存储过程中也无法创建ntext本地变量,但可以创建nvarchar(MAX)本地变量。此外,ntext有可能被弃用,未来将更倾向于使用nvarchar(MAX),详见:ntext, text, and image

2
默认情况下,NVARCHAR(MAX)会将其文本值存储在表结构中,除非文本超过8,000字节(即4,000个双字节字符),此时它会像NTEXT一样将文本值存储在LOB中,并在表中存储指向文本的指针 - 这会导致性能大大降低。
简而言之,请使用NVARCHAR(4000),只要不介意超过8K长的字节丢失。

2
nvarchar 的最大显式限制为4000。而 varchar 的最大限制则为8000。 - Andriy M
谢谢。已编辑答案以反映此内容(即8K = 4K双字节字符)。 - Bohemian
2
什么时候丢失数据才是“可以”的呢? - Aaron Bertrand
@Aaron 如果这个URL是一个数千兆未压缩的蓝光电影,将其存储在数据库中是否可行? - Bohemian
1
如果那是要求,没问题。原帖指出他们正在存储HTML并在nvarchar和ntext之间进行选择,因此我猜测这是因为HTML可能超过4K个字符,而不是因为他们有兴趣存储被截断的HTML版本。 - Aaron Bertrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接