Grundlegendes zu den Einschränkungen und der Kürzung von SQL NVARCHAR und VARCHAR
Dynamische SQL-Abfragen stoßen häufig auf unerwartete Einschränkungen der Zeichenfolgenlänge. Während NVARCHAR(MAX)
theoretisch mehr als 2 GB an Daten fasst, bestehen praktische Einschränkungen, insbesondere bei der Verkettung. Dieser Artikel verdeutlicht diese Grenzen und bietet Lösungen zur Verhinderung von Kürzungen.
Trunkierungsverhalten bei der Verkettung
Das Ergebnis der Zeichenfolgenverkettung hängt stark von den beteiligten Datentypen ab:
varchar(n)
varchar(n)
: Die Kürzung erfolgt bei 8.000 Zeichen.nvarchar(n)
nvarchar(n)
: Die Kürzung erfolgt bei 4.000 Zeichen.varchar(n)
nvarchar(n)
: Die Kürzung erfolgt bei 4.000 Zeichen.[n]varchar(max)
[n]varchar(max)
: Keine Kürzung (unterhalb der 2-GB-Grenze).varchar(max)
varchar(n)
: Keine Kürzung (unterhalb der 2-GB-Grenze), was zu varchar(max)
.varchar(max)
nvarchar(n)
: varchar(n)
wird in nvarchar(n)
umgewandelt. Die Kürzung auf nvarchar(4000)
erfolgt, wenn varchar(n)
4.000 Zeichen überschreitet.nvarchar(max)
varchar(n)
: varchar(n)
wird in nvarchar(n)
umgewandelt. Keine Kürzung (unterhalb der 2-GB-Grenze).Datentypen von String-Literalen
N'string'
(mit N
-Präfix): Wird als nvarchar(n)
behandelt, wobei n
die Zeichenfolgenlänge ist.'string'
(ohne N
Präfix):varchar(n)
wenn die Länge ≤ 8.000 Zeichen ist.varchar(max)
wenn Länge > 8.000 Zeichen.Kürzung verhindern
Um Kürzungsprobleme zu vermeiden:
NVARCHAR(MAX)
konsequent verwenden: Nur NVARCHAR(MAX)
Zeichenfolgen verketten.N
.NVARCHAR(MAX)
: Variablen von Anfang an als NVARCHAR(MAX)
deklarieren:<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Untersuchen abgeschnittener Zeichenfolgen
Um potenziell abgeschnittene Zeichenfolgen vollständig anzuzeigen:
<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Dieser Ansatz umgeht effektiv Längenbeschränkungen für Anzeigezwecke.
Das obige ist der detaillierte Inhalt vonWas sind die Grenzen und das Kürzungsverhalten von SQL NVARCHAR und VARCHAR und wie kann ich Kürzungsprobleme in dynamischen SQL-Abfragen beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!