Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterschied zwischen verschiedenen Zeichenfolgentypen in SQL Server?

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 10
  • NVARCHAR(256) :ist ein zeileninterner Unicode mit variabler Länge und einer Größe von bis zu 256
  • VARCHAR(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.