【问题标题】:What to use for the fields having Text datatype. SQL Server用于具有 Text 数据类型的字段的内容。 SQL 服务器
【发布时间】:2014-10-21 11:01:06
【问题描述】:

我知道了,

ntext、text 和 image 数据类型将在 Microsoft SQL Server 的未来版本中删除。 (http://msdn.microsoft.com/en-us/library/ms187993%28v=sql.90%29.aspx)

现在我有一些带有Text 列的表。它们包含大量文本,我担心Varchar(max) 是否可以保留我们所需的文本长度?

我应该更新我的表并将数据类型更改为Varchar(Max) 吗?会不会影响已经存在的数据?

我使用的是 SQL Server 2008。

【问题讨论】:

  • 是的,Microsoft 建议从 TEXT 数据类型迁移到其等效的 varchar(max) 以实现前向兼容性(2014 年不推荐使用的数据类型)。
  • YES,转换为VARCHAR(MAX)。而VARCHAR(MAX) 在每列中可以容纳 2 GB(20 亿个字符)——这足以容纳大约 175 份列夫·托尔斯泰的战争与和平——在一个中列!很难相信你已经超越了...... 到VARCHAR(MAX) 的转换是非破坏性的,该列中包含的任何文本都将被保留
  • @marc_s: 令人印象深刻——TEXT 可以做同样的事情,所以这不是你升级的原因。
  • @JeroenMostert:同意——但VARCHAR(MAX) 现在终于支持所有常用的字符串函数——而TEXT 只支持令人沮丧的有限字符串函数子集...... .

标签: sql-server


【解决方案1】:

VARCHAR(MAX)TEXT 的推荐替代品,NVARCHAR(MAX)NTEXT 的替代品。但是你不能简单地做一个ALTER TABLE 并更改这些字段而不首先检查你的使用——特别是TEXTNTEXT 具有编辑它们的特殊功能(READTEXTWRITETEXTUPDATETEXT)不适用于(N)VARCHAR(MAX)(并且部分是不必要的,因为常规的字符串操作才有效)。而是通过UPDATE ... C.WRITE() 有效地更新非常大的MAX 字段(例如,需要在中间某处修改的兆字节数据)。

如果您不在任何地方使用这些函数并且所有代码都只是设置值(这很常见),那么更改列类型应该没有问题,但请注意,这需要重建整个表并且可能是一项昂贵的操作如果您的表很大,则需要停机。

对于新工作,不要使用TEXT 类型。对于现有软件,请查看您的需求。最终,TEXTNTEXT 支持将被完全删除,但时间尚未到来——从 SQL Server 2014 开始,它们仍然受到支持,但没有迹象表明它们何时会最终被删除。

【讨论】:

    【解决方案2】:

    请找到 text、ntext 和 image 数据类型的等价物以实现前向兼容性。

    text -> varchar(max)  
    ntext -> nvarchar(max)  
    image -> varbinary(max) 
    

    在此处检查Deprecated Datatypes

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 1970-01-01
      • 2019-03-15
      • 2016-09-27
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2018-05-22
      相关资源
      最近更新 更多