text
und ntext
sind veraltet, so lassen Sie sie für einen Moment weglassen. Für das, was übrig ist, gibt es 3 Dimensionen:
- Unicode (UCS-2) vs.Nicht-Unicode:
N
vor dem Namen bezeichnet Unicode
- feste Länge vs. variable Länge:
var
bezeichnet variable, sonst festen
- In-Reihe vs. BLOB:
(max)
als Länge bezeichnet einen BLOB, sonst ist ein Ein- Zeilenwert
Also mit diesem, können Sie jede Art von Bedeutung lesen:
CHAR(10)
: ist eine in-Reihe fester Länge nicht-Unicode der Größe 10
NVARCHAR(256)
: variable Länge Unicode der Größe von bis zu 256
VARCHAR(MAX)
ist eine In-Reihe: ein BLOB variabler Länge nicht-Unicode
Die veralteten Typen text
und ntext
an die neuen Typen entsprechen varchar(max)
und nvarchar(max)
beziehungsweise.
Wenn Sie Details gehen, verwischt die Bedeutung von in-row
gegen BLOB
für kleine Längen als Motor kann die Speicherung optimieren und eine BLOB in-Reihe ziehen oder einen In-Reihe-Wert in den ‚kleinen BLOB‘ Push Zuordnungseinheit, aber dies ist nur ein Implementierungsdetail. Siehe Table and Index Organization.
Aus Sicht der Programmierung, alle Arten: CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
und NVARCHAR(MAX)
, eine einheitliche String-API unterstützen: String Functions. Die alten veralteten Typen TEXT
und NTEXT
tun nicht unterstützen diese API, sie haben eine separate, deperated, TEXT API zu manipulieren. Sie sollten die veralteten Typen nicht verwenden.
BLOB-Typen unterstützen effiziente In-Place-Aktualisierungen mithilfe der UPDATE table SET column.WRITE(@value, @offset)
-Syntax.
Der Unterschied zwischen Typen mit fester Länge und variabler Länge verschwindet bei der Zeilenkomprimierung in einer Tabelle. Bei aktivierter Zeilenkomprimierung werden feste Länge und variable Länge im selben Format gespeichert, und nachfolgende Leerzeichen werden nicht auf der Festplatte gespeichert, siehe Row Compression Implementation. Beachten Sie, dass die Seitenkomprimierung eine Zeilenkomprimierung erfordert.
http://msdn.microsoft.com/en-us/library/aa258271(SQL.80).aspx – Stu