2010-11-15 14 views

Antwort

41

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.

0

Ich weiß nur zwischen "char" und "varchar".

char: es Speicher bestimmter Größe zuordnen kann, ob es

varchar gefüllt ist: es Speicher basierend auf der Anzahl von Zeichen in ihm vergeben werden, aber es sollte eine gewisse Größe Größe maximal haben genannt.

7
  • 'n' steht für die Unterstützung von Unicode-Zeichen.
  • char - Gibt Zeichenfolge mit fester Speicherlänge an. Speicherplatz zugewiesen mit oder ohne Daten vorhanden.
  • varchar - Speicher mit variabler Länge. Der Speicherplatz wird so viel wie die Länge der Daten in der Spalte zugewiesen.
  • Text - Um große Datenmengen zu speichern. Der zugewiesene Speicherplatz beträgt 16 Byte für den Spaltenspeicher.

Zusätzlich - Text und Ntext haben für varchar (max) und nvarchar (max)

+3

-1 von mir. Speicherplatz ist NICHT in Blöcken von 16 Bytes reserviert. Es benötigt 16 Byte im Spaltenspeicher, ist jedoch anders belegt. Der rest ist in Ordnung. – TomTom

+1

@ TomTom - Ja, meine Antwort bearbeitet. –

+0

Ändert 'varchar' die Größe in allen Zeilen der Spalte? – Panzercrisis

0

n-Präfix als veraltet: Unicode. var *: variable Länge, der Rest ist feste Länge.

Alle Datentypen sind korrekt und schön ... dokumentiert.

hier wie:

http://msdn.microsoft.com/en-us/library/ms187752.aspx

Gibt es wirklich ein Anwendungsfall für jeden dieser Typen, oder sind einige von ihnen nur veraltet?

Nein, es gibt einen guten Fall für ALLE von ihnen.

+1

Es gibt keinen guten Fall für die Verwendung von Text oder Ntext. Es wurde abgelehnt und die Unterstützung wird aus zukünftigen Versionen von SQL Server entfernt. varchar (max) und nvarchar (max) sollten stattdessen verwendet werden. –

+0

rechts. http://msdn.microsoft.com/en-us/library/ms187993.aspx – bevacqua

0

Text ist für sehr große Textmengen gedacht und ist im Allgemeinen nicht dazu gedacht, durchsucht zu werden (kann aber unter Umständen sein. Er wird sowieso langsam sein).

Die char/nchar -Datentypen haben feste Längen und werden gepolstert, wenn eingegebene Daten kürzer sind, im Gegensatz zu den varchar/nvarchar-Typen, die variable Länge haben.

Die n Typen haben Unicode-Unterstützung, wo die Nicht-n-Typen nicht.

3

text und ntext sind deprecated zugunsten von varchar(max) und nvarchar(max)

2

N Präfix zeigt Unicode-Unterstützung und von Nicht-Unicode pro Zeichen zweimal das Bytes einnimmt.

Varchar ist variable Länge. Sie verwenden eine zusätzliche 2 Bytes pro Feld, um die Länge zu speichern.

Char ist feste Länge. Wenn Sie wissen, wie lange Ihre Daten sein werden, verwenden Sie char als Sie werden Bytes speichern!

Text ist nach meiner Erfahrung meist veraltet.

Seien Sie vorsichtig mit Varchar(max) und NVarchar(max), da diese Felder nicht indiziert werden können.

+1

+1 für den Index Kommentar auf Varchar/Nvarchar (max) –

0

Text ist veraltet.

Char ist ein gesetzter Wert. Wenn Sie char (10) sagen, reservieren Sie für jede einzelne Zeile 10 Zeichen, unabhängig davon, ob sie verwendet werden oder nicht. Verwenden Sie dies für etwas, das die Länge nicht ändern sollte (z. B. Postleitzahl oder SSN)

varchar ist variabel. Wenn Sie varchar (10) angeben, werden 2 Byte reserviert, um die Größe der Daten sowie die tatsächlichen Daten (die möglicherweise nur vier Byte enthalten) zu speichern.

Das N steht für uni-code. Zweimal der Raum.

3

Das Präfix n bedeutet einfach Unicode. Die "n" -Typen funktionieren ähnlich wie die normalen Versionen, außer dass sie mit Unicode-Text arbeiten.

char ist ein Feld fester Länge. Daher wird char (10), das mit "Yes" gefüllt ist, immer noch 10 Byte Speicher belegen.

varchar ist ein Feld mit variabler Länge. char (10) gefüllt mit "Yes" benötigt 5 Bytes Speicher (es gibt einen 2 Byte Overhead für die Verwendung von var Datentypen).

Zeichen (n) Zeichenfolge der Länge x beibehalten. Speicher = n Bytes. varchar (n) Haltezeichenfolge der Länge x. Speicher = x + 2 Bytes.

vchar und nvarchar sind ähnlich, außer es ist 2 Bytes pro Zeichen.

Im Allgemeinen sollten Sie nur char & char (über varchar & nvarchar) verwenden, wenn Sie mit festen oder halb-festen Strings arbeiten. Ein gutes Beispiel wäre ein product_code oder user_type, der immer n Zeichen lang ist.

Sie sollten keinen Text (oder Ntext) verwenden, da dieser veraltet ist. varchar (max) & nvarchar (max) bietet die gleiche Funktionalität.

Verwandte Themen