Derzeit verwenden wir in unserer SQL Server 2012-Datenbank, varchar
und das möchten wir ändern nvarchar
. Ich habe dazu ein Skript generiert.
Meine Frage ist, gibt es irgendwelche Unterschiede in, wie SQL Server varchar
Spalten gegen nvarchar
Spalten schreibt ? Wir haben eine Reihe von Backend-Prozeduren, die mir Sorgen machen.
Bearbeiten:
Nicht sicher, ob dies hilft, aber die Spalten haben keine Indizes, f / k oder Einschränkungen.
sql-server
varchar
Chris L
quelle
quelle
Antworten:
Sie müssen sicherstellen, dass Sie Unicode-Zeichenfolgenliteralen ein N-Präfix voranstellen. Diese funktionieren beispielsweise anders, wenn der zugrunde liegende Datentyp ist
NVARCHAR
:Ergebnisse:
Für Benutzer mobiler Geräte oder heruntergekommener Browser, die Box-Zeichen anstelle von tatsächlichen Unicode-Zeichen anzeigen, sieht dies folgendermaßen aus:
quelle
Die größte Sorge ist, dass
nvarchar
2 Bytes pro Zeichen verwendet werden, wohingegen 1varchar
verwendet wird.nvarchar(4000)
Verwendet daher dieselbe Menge an Speicherplatz wievarchar(8000)
*.Zusätzlich zu all Ihren Charakterdaten, die doppelt so viel Speicherplatz benötigen, bedeutet dies auch:
nvarchar
Spalten verwenden, um die Zeilen innerhalb des Spaltenlimits von 8060 Byte / 8000 Byte Zeichen zu halten.nvarchar(max)
Spalten verwenden, werden diese früher als üblich aus der Reihe verschobenvarchar(max)
.nvarchar
Spalten verwenden, um die 900-Byte-Indexschlüsselbeschränkung einzuhalten (ich weiß nicht, warum Sie einen so großen Indexschlüssel verwenden möchten, aber Sie wissen es nie).Abgesehen davon ist das Arbeiten mit
nvarchar
nicht viel anders, vorausgesetzt, Ihre Client-Software ist für Unicode ausgelegt. SQL Server konvertiert transparent ein nachvarchar
nach obennvarchar
, sodass Sie das N-Präfix für Zeichenfolgenliterale nur dann unbedingt benötigen, wenn Sie 2-Byte-Zeichen (dh Unicode) im Literal verwenden. Beachten Sie, dass das Castingnvarchar
zuvarbinary
anderen Ergebnissen führt als das Gleichevarchar
. Der wichtige Punkt ist, dass Sie nicht jedes varchar-Literal sofort in ein nvarchar-Literal ändern müssen, um die Anwendung am Laufen zu halten, was den Prozess vereinfacht.* Wenn Sie die Datenkomprimierung verwenden (die leichte Zeilenkomprimierung genug ist , erforderlich Enterprise Edition vor SQL Server 2016 SP1 ) werden Sie in der Regel finden
nchar
undnvarchar
nicht mehr Platz eingenommen haben , alschar
undvarchar
aufgrund Unicode - Kompression (den SCSU - Algorithmus) .quelle
Denken Sie, dass die folgenden Hauptunterschiede sind:
quelle
nvarchar war für die RDP-Merge-Replikation von einer mobilen Datenbank auf SQL Server 2005 erforderlich. Auch LTrim (), RTrim () und Trim () wurden häufig verwendet, da nvarchar Leerzeichen von der Dateneingabe nicht automatisch abschneidet (), während Varchar dies tat .
Mir ist nicht bekannt, ob sich dies in den letzten Jahren geändert hat oder nicht, aber nvarchar ist jetzt der Standard, der für Anmeldungen auf der .NET Simple Membership-Website für VS Pro 2017 in der generierten Datenbank verwendet wird.
quelle
Wenn Sie NVarchar über Varchar verwenden und MULTI-LINQUAL nicht unterstützen müssen, erhöhen Sie den Speicher für DB, Backups (lokal und extern). Moderne Datenbanken sollten beides unterstützen und alle Conversion-Treffer sollten im Design berücksichtigt werden.
quelle