使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有啥好处? [关闭]

Posted

技术标签:

【中文标题】使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有啥好处? [关闭]【英文标题】:What are the benefits of using VARCHAR(max), NVARCHAR(max) and VARBINARY(max) instead of TEXT, NTEXT and IMAGE? [closed]使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有什么好处? [关闭] 【发布时间】:2012-09-23 01:33:38 【问题描述】:

我知道 TEXT、NTEXT 和 IMAGE 已被弃用,最终将从 SQL Server 中删除。

但是,除了这种弃用,为什么 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 数据类型更好?微软为什么选择它们?

我注意到 VARCHAR 和 NVARCHAR 可以与 = 和 GROUP BY 一起使用,而旧类型不能。还有更多好处吗?

【问题讨论】:

不仅仅是=。几乎没有任何字符串函数适用于text 字段,并且新的数据类型更易于使用。例如,要对文本字段进行替换,您需要使用 TEXTPTRs like here。对于varchar(max),您只需致电REPLACE 可能重复:***.com/questions/564755/… 您希望从这个问题中获得什么?您可以在“与类似的非最大数据类型一致的数据类型”或“微软大声喊叫不要使用的数据类型”之间进行选择。您实际要使用哪些类型? @Damien_The_Unbeliever:我希望了解还有哪些其他优势。文本等不会马上停产,甚至在下一个 SQL Server 中也不会停产,那么立即转换数千列真的值得吗?还是可以等?我在这类问题中看到了很多见解。 【参考方案1】:

因为它们已被弃用或not going to be supported

重要 ntext 、 text 和 image 数据类型将在 Microsoft SQL Server 的未来版本中删除。避免使用这些数据类型 在新的开发工作中,并计划修改应用程序 目前使用它们。使用 nvarchar(max)、varchar(max) 和 varbinary(max) 代替。

相关问题

SQL 2008 - varchar(max) vs text data types SQL Server Text type vs. varchar data type

【讨论】:

是的,但是,除了弃用之外,为什么新的数据类型更好?除了弃用... @JohnAssymptoth 除了如果你有一天开始使用它们,你将不得不迁移,而不是从一开始就这样做?我不确定我是否遵循您的逻辑:-) 不,他们根本没有depreciated。但他们一直是deprecated,因为他们背负着遗留的包袱,例如必须使用 TEXTPTR、WRITETEXT 等来处理 N/TEXT【参考方案2】:

这些数据类型已被弃用,因为随着 SQL Server 的进步,不再需要处理与 VARCHAR 或 BINARY 不同的大块文本 (TEXT) 或二进制数据 (IMAGE)。由于存储不再是一个真正的问题,我们现在可以对您的内容进行 SUBSTRING(<varchar(max)>, 1234567, 400),而在过去,1 MB 似乎很多并且需要特殊处理,例如这里的函数article.

IMAGE 携带与 TEXT 类似的包袱,这需要以一种特殊的方式存储大小,而不是扩展 VARBINARY 以适应任何东西一直到 2GB。

但是,具有专用 BLOB 和 CLOB 的相同原因在内存/存储限制下仍然有效,因此 SQL Server CE 继续具有 IMAGE 类型,并且在这方面不会很快消失。

【讨论】:

以上是关于使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有啥好处? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

总是使用nvarchar(MAX)有什么缺点吗?

charvarchar和nvarchar的区别

SQL NVARCHAR 和 VARCHAR 限制

SQL NVARCHAR 和 VARCHAR 限制

NVARCHAR(MAX) 的最大字符数是多少? [复制]

RODBC sqlQuery() 在应该返回 varchar(MAX) 时返回 varchar(255)