text
und ntext
sind veraltet, also lassen wir sie für einen Moment weg. Für das, was übrig bleibt, gibt es 3 Dimensionen:
- Unicode (UCS-2) vs. Nicht-Unicode:
N
vor dem Namen steht für Unicode - Feste Länge vs. variable Länge:
var
bezeichnet variabel, ansonsten fest - Reihenintern vs. BLOB:
(max)
as length bezeichnet ein BLOB, andernfalls ist es ein In-Row-Wert
Damit können Sie also die Bedeutung jedes Typs lesen:
CHAR(10)
:ist ein Nicht-Unicode mit fester Länge in der Zeile der Größe 10NVARCHAR(256)
:ist ein zeileninterner Unicode mit variabler Länge und einer Größe von bis zu 256VARCHAR(MAX)
:ist ein BLOB mit variabler Länge, Nicht-Unicode
Die veralteten Typen text
und ntext
entsprechen den neuen Typen varchar(max)
und nvarchar(max)
bzw..
Wenn Sie zu den Details gehen, die Bedeutung von in-row
vs. BLOB
verwischt für kleine Längen, wie es der Motor kann Optimieren Sie den Speicher und ziehen Sie ein BLOB in die Reihe oder schieben Sie einen Wert in der Reihe in die Zuordnungseinheit „kleines BLOB“, aber dies ist nur ein Implementierungsdetail. Siehe Tabellen- und Indexorganisation
.
Aus Programmiersicht alle Typen:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
und NVARCHAR(MAX)
, unterstützen eine einheitliche String-API:String-Funktionen
. Der alte, veraltete Typ gibt TEXT
ein und NTEXT
nicht diese API unterstützen, müssen sie eine separate, deperierte TEXT-API manipulieren. Sie sollten die veralteten Typen nicht verwenden.
BLOB-Typen unterstützen effiziente direkte Aktualisierungen durch Verwendung von UPDATE table SET column.WRITE(@value, @offset)
Syntax.
Der Unterschied zwischen Typen mit fester Länge und Typen mit variabler Länge verschwindet bei der Zeilenkomprimierung in einer Tabelle. Bei aktivierter Zeilenkomprimierung werden Typen mit fester und variabler Länge im selben Format gespeichert und nachgestellte Leerzeichen werden nicht auf der Festplatte gespeichert, siehe Implementierung der Zeilenkomprimierung . Beachten Sie, dass Seitenkomprimierung Zeilenkomprimierung impliziert.