SQL 2008 - varchar(max)与文本数据类型[重复]

Posted

技术标签:

【中文标题】SQL 2008 - varchar(max)与文本数据类型[重复]【英文标题】:SQL 2008 - varchar(max) vs text data types [duplicate] 【发布时间】:2011-11-15 10:49:58 【问题描述】:

可能重复:SQL Server Text type vs. varchar data typeUsing varchar(MAX) vs TEXT on SQL Server

从这篇文章看来,它们的容量大小相同:http://msdn.microsoft.com/en-us/library/ms143432.aspx

这真的正确吗?真正的区别是什么?

我刚刚从 oracle 迁移了一些数据(clob 并将其转换为 varchar(max),但它看起来还是截断了一些值,我应该改用 TEXT 吗?

谢谢!

【问题讨论】:

TEXT 正在被弃用 - andrewm-developmentnotes.blogspot.com/2011/03/… 这个帖子有你要找的答案:***.com/questions/564755/… ***.com/questions/834788/… 您使用什么代码迁移数据?我认为你有一个问题,你是如何做到的,而不是数据类型是什么。 看链接***.com/q/28980502/1805776 【参考方案1】:

不,您不应该使用TEXT。一方面,it has been deprecated since SQL Server 2005,而且您会发现许多字符串操作对它不起作用。完全不要使用TEXTNTEXTIMAGE - 请改用VARCHAR(MAX)NVARCHAR(MAX)VARBINARY(MAX)

【讨论】:

该死的微软。为什么他们不能遵守约定并使用 mysql 和 Postgres 之类的文本? @Henley 因为他们已经使用了文本,而且很糟糕。为什么 MySQL 不能遵循标准并使用偏移/获取来代替这种愚蠢的限制废话?泥土飞来飞去…… 风很大时不会【参考方案2】:

不推荐使用旧类型(TEXT、NTEXT、IMAGE),并且在 SQL Server 的未来版本中将放弃对它们的支持。

您使用它们的方式存在显着差异。新的 MAX 类型支持使用 .WRITE 语法的高效更新。遗留类型有一组神秘的函数来实现相同的目标(TEXTPTRUPDATETEXTsp_invalidate_testptr)。

新的 MAX 类型可用于REPLACESUBSTRING 等函数,任何接受VARCHAR(N) 的函数也将接受VARCHAR(MAX)

遗留类型不支持 MAX 类型支持的隐式转换,请参阅Data Type Conversions。

某些引擎功能适用于 MAX 类型,但不适用于旧类型,例如。线上运营(SQL 11 they support tables with BLOBs)

【讨论】:

【参考方案3】:

链接的文章仅涉及空间分配。至少要知道text, ntext and image data types will be removed from future releases of SQL Server,因此对于新表,请使用 varchar(max)、nvarchar(max) 或 varbinary(max)。

同样重要的是人们如何与这些价值观互动。由于数据类型的原因,您更愿意使用标准 column = 'really long value' 还是 UPDATETEXT 和其他不太常见的操作来处理列?

【讨论】:

以上是关于SQL 2008 - varchar(max)与文本数据类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

求和然后删除一行 - SQL Server 2008 R2

SQL语句批量查询~

varchar(-1)是什么意思?

查看SQL SERVER 2008R2 表大小

SQL NVARCHAR 和 VARCHAR 限制

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