SQL 2008 - varchar(max) vs text data types [duplicate]
Asked Answered
O

3

8

Possible Duplicate:
SQL Server Text type vs. varchar data type
Using varchar(MAX) vs TEXT on SQL Server

from this article, it looks like they both have the same size capacity: http://msdn.microsoft.com/en-us/library/ms143432.aspx

is that truly correct? what are the real differences?

i just migrated some data from oracle (clob and made it into a varchar(max), but it looks like it truncated some of the values anyway, should i use TEXT instead?

Thank you!

Osteotome answered 12/9, 2011 at 15:19 Comment(5)
TEXT is becoming depracated - andrewm-developmentnotes.blogspot.com/2011/03/…Aeciospore
This thread has the answer you are looking for: #565255Marchand
#835288Cellaret
what code did you use to migrate the data? I think you have a problme with how you did it not what the datatype was.Surd
Look at the link https://mcmap.net/q/41788/-sql-varchar-max-vs-varchar-fix/1805776Magnate
H
13

No, you should not use TEXT. For one, it has been deprecated since SQL Server 2005, and also you will find that many string operations do not work against it. Do not use TEXT, NTEXT or IMAGE at all - use VARCHAR(MAX), NVARCHAR(MAX) or VARBINARY(MAX) instead.

Heyduck answered 12/9, 2011 at 15:23 Comment(3)
Damn Microsoft. Why can't they stick to conventions and use text like MySQL and Postgres?Vandenberg
@Henley because they used text already and it sucked. Why couldn't MySQL follow the standard and use offset/fetch instead of this silly limit crap? Mud flies both ways...Heyduck
not if there's a lot of windKumasi
H
9

The legacy types (TEXT, NTEXT, IMAGE) are deprecated and support for them will be dropped in a future version of SQL Server.

There are significant differences in how you use them. The new MAX types support efficient updates with the .WRITE syntax. The legacy types have an arcane set of functions to achieve the same (TEXTPTR, UPDATETEXT, sp_invalidate_testptr).

The new MAX types can be used in functions like REPLACE or SUBSTRING, any function that accepts a VARCHAR(N) will also accept a VARCHAR(MAX).

The legacy types do not support implicit conversion which the MAX types support, see Data Type Conversions.

Certain engine features work with MAX types, but not with the legacy ones, eg. online operations (in SQL 11 they support tables with BLOBs)

Hemimorphic answered 12/9, 2011 at 15:24 Comment(0)
K
2

The linked article only deals with space allocation. At a minimum, know that text, ntext and image data types will be removed from future releases of SQL Server so for new tables, use varchar(max), nvarchar(max) or varbinary(max).

Of equal importance would be how one interacts with those values. Would you rather use the standard column = 'really long value' or UPDATETEXT and other less common operations to work on a column because of the data type?

Kodak answered 12/9, 2011 at 15:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.