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

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

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

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

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

谢谢!

【问题讨论】:

标签: sql sql-server-2008 varchar sqldatatypes varcharmax


【解决方案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 和其他不太常见的操作来处理列?

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多