Welche Vor- und Nachteile hat die Verwendung der Datentypen nvarchar(max)
vs. NText
in SQL Server? Ich benötige keine Abwärtskompatibilität, daher ist es in Ordnung, dass nvarchar(max)
dies in älteren SQL Server-Versionen nicht unterstützt wird.
Bearbeiten: Anscheinend gilt die Frage auch für TEXT
und IMAGE
vs. varchar(max)
und varbinary(max)
für diejenigen, die später nach diesen Datentypen suchen.
sql-server
sql-server-2005
sql-server-2008
text
nvarchar
David Pfeffer
quelle
quelle
VARCHAR(MAX)
ist groß genug, umTEXT
Feld aufzunehmen.TEXT
,NTEXT
UndIMAGE
Datentypen von SQL Server 2000 werden in zukünftigen Versionen von SQL Server, SQL Server 2005 bietet Abwärtskompatibilität zu Datentypen veraltet werden , aber es wird empfohlen, neue Datentypen zu verwenden , die sindVARCHAR(MAX)
,NVARCHAR(MAX)
undVARBINARY(MAX)
.quelle
ntext
speichert seine Daten immer auf einer separaten Datenbankseite, währendnvarchar(max)
versucht wird, die Daten im Datenbankeintrag selbst zu speichern.nvarchar(max)
Ist also etwas schneller (wenn Sie Text haben, der kleiner als 8 kB ist). Mir ist auch aufgefallen, dass die Datenbankgröße etwas langsamer wird, das ist auch gut so.Geh
nvarchar(max)
.quelle
nvarchar(max)
ist das, was Sie verwenden möchten. Der größte Vorteil ist, dass Sie alle T-SQL-Zeichenfolgenfunktionen für diesen Datentyp verwenden können. Dies ist mit nicht möglichntext
. Ich bin mir keiner wirklichen Nachteile bewusst.quelle
nvarchar(max)
aber das beschränkt mich auf 4000 Zeichen. Was ist, wenn ich möchte, dass ein Feld mehr enthält?nvarchar(max)
auf 4000 Zeichen begrenzt ist. Für SQL Server Compact habe ich keine andere Wahl, alsntext
in einigen Fällen zu verwenden. Wenn sie es einstellen, muss ich wahrscheinlich einige Websites nicht aktualisieren.Sie sollten anscheinend verwenden
nvarchar(max)
:MSDN
quelle
Der größte Nachteil von
Text
(zusammen mitNText
undImage
) ist, dass es in einer zukünftigen Version von SQL Server wie in der Dokumentation entfernt wird . Dadurch wird es schwieriger, Ihr Schema zu aktualisieren, wenn diese Version von SQL Server veröffentlicht wird.quelle
Wollte meine Erfahrung mit dem Konvertieren hinzufügen. Ich hatte viele
text
Felder im alten Linq2SQL-Code. Auf diese Weise konntentext
in Indizes vorhandene Spalten ONLINE neu erstellt werden .Zuerst wusste ich jahrelang über die Vorteile Bescheid, ging aber immer davon aus, dass das Konvertieren einige beängstigende lange Abfragen bedeuten würde, bei denen SQL Server die Tabelle neu erstellen und alles kopieren müsste, um meine Websites herunterzufahren und meine Herzfrequenz zu erhöhen.
Ich war auch besorgt, dass Linq2SQL Fehler verursachen könnte, wenn es eine Art Überprüfung des Spaltentyps durchführt.
Ich freue mich jedoch darüber zu berichten, dass die ALTER-Befehle SOFORT zurückgegeben wurden - sie ändern also definitiv nur Tabellenmetadaten. Möglicherweise wird offline gearbeitet, um Daten mit <8000 Zeichen wieder in die Tabelle aufzunehmen, aber der Befehl ALTER wurde sofort ausgeführt.
Ich habe Folgendes ausgeführt, um alle Spalten zu finden, die konvertiert werden müssen:
Dies gab mir eine schöne Liste von Abfragen, die ich gerade ausgewählt und in ein neues Fenster kopiert habe. Wie ich schon sagte - das Laufen war sofort.
Linq2SQL ist ziemlich alt - es verwendet einen Designer, auf den Sie Tabellen ziehen. Die Situation mag für EF Code zuerst komplexer sein, aber ich habe das noch nicht angegangen.
quelle
Ich möchte hinzufügen, dass Sie die .WRITE- Klausel für teilweise oder vollständige Aktualisierungen und Hochleistungsanhänge an
varchar(max)/nvarchar(max)
Datentypen verwenden können.Hier finden Sie ein vollständiges Beispiel für die Verwendung der
.WRITE
Klausel.quelle