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,而且您会发现许多字符串操作对它不起作用。完全不要使用TEXT
、NTEXT
或IMAGE
- 请改用VARCHAR(MAX)
、NVARCHAR(MAX)
或VARBINARY(MAX)
。
【讨论】:
该死的微软。为什么他们不能遵守约定并使用 mysql 和 Postgres 之类的文本? @Henley 因为他们已经使用了文本,而且很糟糕。为什么 MySQL 不能遵循标准并使用偏移/获取来代替这种愚蠢的限制废话?泥土飞来飞去…… 风很大时不会【参考方案2】:不推荐使用旧类型(TEXT、NTEXT、IMAGE),并且在 SQL Server 的未来版本中将放弃对它们的支持。
您使用它们的方式存在显着差异。新的 MAX 类型支持使用 .WRITE
语法的高效更新。遗留类型有一组神秘的函数来实现相同的目标(TEXTPTR
、UPDATETEXT
、sp_invalidate_testptr
)。
新的 MAX 类型可用于REPLACE
或SUBSTRING
等函数,任何接受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)与文本数据类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章