In diesem Artikel werden wir den SQL varchar-Datentyp einschließlich einer grundlegenden Definition und Übersicht, Unterschiede zu varchar(n), UTF-8-Unterstützung, Sortierung, Leistungsüberlegungen und mehr überprüfen.
Daten spielen in jeder Organisation eine entscheidende Rolle, und ein Attribut, mit dem sie definiert werden, wird als Datentyp bezeichnet. In einfachen Worten gibt der Datentyp an, welche Art von Daten ein Objekt, eine Variable oder ein Ausdruck speichern kann., Als SQL-Entwickler müssen wir beim Erstellen einer SQL-Tabelle verstehen und entscheiden, welcher Datentyp in jeder einzelnen Spalte einer Tabelle enthalten sein soll. Wie jede andere Programmiersprache unterstützt auch SQL eine Reihe von Datentypen, die ganzzahlige Daten, Datums-und Zeitdaten, Zeichendaten usw. enthalten können. und ermöglicht es Ihnen, auch eigene Datentypen zu definieren. SQL varchar ist einer der bekanntesten und am häufigsten verwendeten Datentypen unter den Losen. In diesem Artikel werden wir durch verschiedene Facetten des SQL Server varchar im SQL Server gehen.
Unten ist der Umriss, den wir in diesem Block behandeln werden.,
- Einführung in den SQL Server varchar Datentyp in SQL Server
- Verwendung von varchar für große Textblöcke
- Was ist neu in der SQL Server 2019 Vorschau für varchar Datentyp?,
- Einfluss der Sortierung auf varchar SQL in SQL Server
- UTF-8-Unterstützung mit varchar in SQL Server 2019 CTP
- SQL Server varchar für Datenkonvertierungen und Datenanzeige
- Speicher-und Leistungsüberlegungen mit SQL Server varchar
- Auswirkungen auf die Zeichenfolgenlänge von SQL varchar mit CAST-und CONVERT-Funktionen
Lassen Sie uns fortfahren und die oben genannten in Aktion sehen.
Was ist varchar in SQL?
Wie der Name schon sagt, bedeutet varchar Zeichendaten, die variieren., Es wird auch als variables Zeichen bezeichnet und ist ein Datentyp mit unbestimmter Länge. Es kann Zahlen, Buchstaben und Sonderzeichen enthalten. Microsoft SQL Server 2008 (und höher) kann mit dem Datentyp varchar bis zu 8000 Zeichen als maximale Länge der Zeichenfolge speichern. SQL varchar enthält normalerweise 1 Byte pro Zeichen und 2 weitere Bytes für die Längeninformationen. Es wird empfohlen, varchar als Datentyp zu verwenden, wenn Spalten eine variable Länge haben und die tatsächlichen Daten viel kleiner als die angegebene Kapazität sind. Lassen Sie uns zu SSMS wechseln und sehen, wie Varchar funktioniert.,
Im folgenden Beispiel werden drei Variablen (Name, Geschlecht und Alter) mit varchar als Datentyp und unterschiedlichen Werten erstellt. Wie aus den unten gezeigten Ergebnismengen hervorgeht, beträgt die Zeichenfolgenlänge der SQL-Varchar-Spalten standardmäßig 1 und gibt nur den ersten Wert der Variablen zurück(der Rest der Zeichenfolge wird abgeschnitten), wenn für den varchar-Datentyp keine Zeichenfolgenlänge übergeben wird. Die Funktion len () wird verwendet, um die Anzahl der in der varchar-Spalte gespeicherten Zeichen zu bestimmen.
Wie unterscheidet sich SQL varchar (max) von varchar(n)?,
Es gibt Zeiten, in denen SQL-Entwickler (einschließlich ich) in der Regel varchar Datentyp ohne Länge definieren, und anschließend nicht String-Datensätze in der SQL-Tabelle einzufügen, ist dies, weil SQL Server 1 Zeichenraum als Standardwert für die varchar Spalte zuweist, die ohne Länge definiert ist. In praktischen Szenarien wird varchar (n) verwendet, um den Wert der variablen Länge als Zeichenfolge zu speichern, hier bezeichnet ’n‘ die Zeichenfolgenlänge in Bytes und kann bis zu 8000 Zeichen betragen., Gehen wir nun weiter und sehen, wie wir SQL-Varchar-Daten mit einer Zeichenfolgenlänge in der Spalte einer SQL-Tabelle speichern können. Das folgende Skript erstellt die Tabelle Demovarchar mit einigen Daten darin. Und der Ergebnisbildschirm zeigt Aufzeichnungen von 7 Mitarbeitern basierend auf ihren Abteilungen, Alter usw.
Angenommen, es wird ein neuer Mitarbeiter in der Organisation hinzugefügt, und wir als SQL-Datenentwickler müssten diesen neuen Datensatz mithilfe der SQL-Anweisung INSERT in die obige Tabelle einfügen. Unten ist ein solches Beispiel gezeigt.,
1
|
INSERT INTO Demovarchar VALUES(‚Newton Hamilton‘, ‚Isaac‘,’M‘,’Design Head‘,69)
|
Oops, SQL Server encountered an error and terminated the statement saying string or binary data would be truncated., Dies ist aufgetreten, weil der Spaltenname varchar(10) bis zu 10 Zeichen enthalten kann und wir hier versuchen, einen neuen Datensatz mit einer Zeichenfolgenlänge(‚Newton Hamilton‘) einzufügen, die deutlich größer als 10 Zeichen ist. Als schnelle Lösung können wir die Tabelle ändern und den Datentyp der SQL-varchar-Spalte erhöhen, z. B. varchar(50), um die neue Zeile einzufügen. Führen Sie das folgende Skript aus, um einen neuen Datensatz zu ÄNDERN und in die Tabelle einzufügen., Darüber hinaus können Sie mit den Funktionen LEN() und DATALENGTH() die Anzahl der Zeichen und die Speichergröße in Bytes bestimmen, die in der Spalte varchar gespeichert sind.
Wir haben oben beobachtet, wie wir die Zeichenfolgenlänge in der SQL-varchar-Spalte festlegen oder ändern können, um die Geschäftsanforderungen zu erfüllen. Betrachten Sie jedoch ein Szenario, in dem wir uns nicht sicher sind, welche Datengröße in unsere SQL-Tabellen geladen werden soll, unter solchen Umständen ist das Überprüfen und Ändern der Datentypgröße für jede einzelne Spalte keine praktikable Wahl., Eine der Optionen, um dies zu handhaben, besteht darin, die Zeichenfolgenlänge in der höheren Leiste in der SQL Server-Varchar-Spalte festzulegen (vorausgesetzt, Sie haben eine grobe Schätzung, welche Länge der Zeichenfolgenspalte ungefähr betragen würde).
Ein wichtiger Punkt, den wir berücksichtigen sollten, ist, dass wir die Zeichenfolgenlänge bis zu varchar(8000) nur verwenden können, da dies die maximale Anzahl von Zeichen ist, die der Datentyp SQL varchar(n) enthalten kann. In Fällen, in denen die Wahrscheinlichkeit besteht, dass die Zeichenfolgenlänge der varchar-Spalte 8000 Byte überschreitet, führt die Verwendung von varchar(8001) oder etwas höherem zu einem Fehler., One short example demonstrating this fact is shown below.
1
2
|
DECLARE @name AS varchar(8001) = ‚john parker d“souza‘;
SELECT @name Name
|
SQL Server 2005 got around this limitation of 8KB storage size and provided a workaround with varchar(max)., Es ist ein Nicht-Unicode-Datentyp mit großen Zeichen variabler Länge und kann maximal 2^31-1 Byte (2 GB) Nicht-Unicode-Zeichen speichern.
Als ich zum ersten Mal mit den Konzepten von varchar(n) und SQL varchar vertraut gemacht wurde, war die häufige Frage, warum wir nicht einfach eine Spalte vom Datentyp varchar(8500) oder höher deklarieren können, da wir varchar(max) haben, das sich um Speicher bis zu 2 GB kümmert, und warum sollten wir entweder varchar(<=8000) oder varchar(max)?, Ich habe meine Antworten auf ein wenig Recherche erhalten, dass SQL Server Seite zum Speichern von Daten verwendet und die Größe jeder Seite 8 KB beträgt(ohne Seitenkopfzeile, Zeilenversatzgröße). Wenn die zu speichernden Daten kleiner oder gleich 8000 Byte sind, speichert varchar(n) oder varchar(max) sie hintereinander. Wenn die Daten jedoch die 8000-Byte-Größe überschreiten, werden sie als großes Objekt(LOB) behandelt und nicht in Zeile, sondern in separaten LOB-Seiten(LOB_DATA) gespeichert., Zeile hat in einem solchen Fall nur einen Zeiger auf die LOB-Datenseite, auf der die tatsächlichen Daten vorhanden sind, und SQL Server weist der Seite automatisch einen Überflussindikator zu, um Datenzeilen zu bearbeiten. Kurz gesagt, wenn Sie wissen, dass die Daten 8000 Byte überschreiten können, ist es eine bessere Option, varchar(max) als Datentyp zu verwenden.
Wir können auf DMV sys.dm_db_index_physical_stats verweisen, um zu sehen, welche Art von Seitenzuweisung (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) ausgeführt wird., Sie können diesen Link auch aufrufen, falls Sie eine detaillierte Erklärung dazu wünschen, wie SQL Server Zeilen-und Seitenlimits sowohl mit den Datentypen varchar(n) als auch varchar(max) ausübt.
Springen wir schnell zu SSMS und sehen, wie wir varchar(max) verwenden können. Führen Sie das folgende Skript aus, um 1 Datensatz einzufügen, wobei der StringCol-Spaltenwert in jeder Zeile 15.000 B Zeichen (dh 15.000 Bytes) beträgt.
Eine Einschränkung der Verwendung von varchar(max) ist, dass wir keinen Index erstellen können, der einen varchar(max) als Schlüsselspalte hat, stattdessen ist es ratsam, einen Volltextindex für diese Spalte zu erstellen.,
Eine kurze Notiz – Von hier bis zum letzten Abschnitt dieses Artikels werden wir varchar anstelle von varchar(n) erwähnen. Betrachten Sie es NICHT als varchar mit dem Standardwert = 1.
Um weitere interessante Unterschiede zwischen varchar(n) und varchar(max) in SQL Server zu erfahren, sollten Sie diesen Artikel durchgehen und VARCHAR(max) mit VARCHAR(n) – Datentypen in SQL Server vergleichen.
UTF-8-Unterstützung mit SQL Server 2019 CTP
Bevor wir uns mit der Vorschau – Funktion von SQL Server 2019 für SQL varchar befassen, schauen wir uns schnell einen weiteren interessanten Datentyp an – ’nvarchar‘ zuerst., Wie SQL Server varchar haben wir SQL nvarchar, das Präfix n in nvarchar bezeichnet Unicode, dh es speichert sowohl Unicode-als auch Nicht-Unicode-Daten. Der Hauptunterschied zwischen varchar und nvarchar ist die Art und Weise, wie sie gespeichert werden, varchar wird als reguläre 8-Bit-Daten(1 Byte pro Zeichen) gespeichert und nvarchar speichert Daten bei 2 Bytes pro Zeichen. Aus diesem Grund kann nvarchar bis zu 4000 Zeichen enthalten und benötigt doppelt so viel Speicherplatz wie SQL varchar. Sie können über diesen Link mehr über nvarchar in SQL Server erfahren.,
Mit der öffentlichen Vorschau von SQL Server 2019 hat Microsoft die Unterstützung der UTF-8-Zeichencodierung für die vorhandenen Datentypen (varchar und char) angekündigt. Für diejenigen, die UTF-8 nicht kennen, steht es für Unicode Transformation Format und ist eine Unicode-basierte Codierung, die viele Sprachen unterstützt. Die 8 in UTF-8 bedeutet, dass sie 1 Byte (8 Bits) verwendet, um ein Zeichen im Speicher darzustellen. Ebenso verwendet UTF-16 16 Bits (2 Bytes), um ein Zeichen darzustellen. Wir werden den Umfang dieser neuen SQL Server 2019 CTP-Erweiterung nur in diesem Artikel auf ‚SQL varchar‘ beschränken.,
Diese Erweiterung hat folgende Auswirkungen auf SQL Server: ist
- Verbessert die Datenkompatibilität
Bis SQL Server 2019 CTP, SQL varchar Datentyp hatte die Kapazität, nur Nicht-Unicode-Daten zu speichern und mit dieser Vorschau können wir jetzt eine Varchar-Spalte erstellen, um Unicode-Daten unter UTF-8-aktivierten Kollationen (_UTF8) zu speichern. UTF-8 ist in den varchar-Datentypen zulässig und wird beim Erstellen oder Ändern der Sortierung eines Objekts in eine Sortierung mit dem Suffix UTF8 aktiviert. Dies hilft bei der Minimierung von Zeichenumwandlungsproblemen.,
- Reduzierung von Speicher – und Leistungsverbesserungen
Die UTF-8-Unterstützung für den varchar-Datentyp bietet je nach verwendetem Zeichensatz erhebliche Speichereinsparungen. Wenn Sie beispielsweise eine UTF-8-aktivierte Sortierung verwenden, führt das Ändern des Spaltendatentyps von nvarchar(20) in varchar(20) zu einem erheblichen Rückgang der Speicheranforderungen, da nvarchar(20) 40 Byte für die Speicherung benötigt und varchar(20) 20 Byte für dieselbe Unicode-Zeichenfolge benötigt.
Wichtige Randnotiz-Da diese Erweiterung noch in der Vorschau ist, können wir in naher Zukunft weitere Fortschritte an dieser Front erwarten., Vorhandene Unicode-Datentypen (UTF-16) (nchar, nvarchar und ntext) bleiben jedoch in der SQL Server 2019-Vorschau unverändert.
Sortierung mit SQL varchar in SQL Server 2019 CTP
Sortierung in SQL Server definiert Konfigurationen, um verschiedene Regeln wie Groß – / Kleinschreibung, Akzentempfindlichkeit, Sortierung, Zeichentypen und Breite usw. zu bestimmen. Das Verständnis all dieser Eigenschaften und wie sie mit Ihren Daten arbeiten, wird sehr wichtig. Die Sortierung kann auf Server -, Datenbank -, Ausdrucks-oder Spaltenebene festgelegt werden., UTF-8 unterstützt die Sortierung auf Datenbankebene oder Spaltenebene in SQL Server 2019 CTP und ist aktiviert, wenn Sie die Datenbank-oder Spaltensammlung in eine Sortierung mit dem Suffix UTF8 erstellen oder ändern.
Wenn Sie die folgende Abfrage für SQL Server 2019 CTP ausführen, können Sie mithilfe der Funktion (fn_helpcollations ()) alle von UTF-8 unterstützten Kollationen auf Ihrer SQL Server-Instanz anzeigen.,d=“284f85b8b5″>
1
2
3
|
SELECT Name, Description
FROM fn_helpcollations()
WHERE Name like ‚%UTF8‘;
|
With SQL Server 2019 preview version, we can assign Unicode collations (UTF-8 supported) as well for SQL varchar columns using the COLLATE clause while declaring the varchar column., Auf diese Weise wird eine bestimmte Sortierung auf die Daten der jeweiligen Spalte angewendet, ohne den Rest der Datenbank zu beeinträchtigen.
Da wir es in diesem Beitrag mit dem SQL Server varchar-Datentyp zu tun haben, sehen wir uns an, wie die Spaltensortierung mit dem SQL varchar-Datentyp funktioniert. Führen Sie den folgenden Code aus, um die Sortierung der SQL Server varchar-Spalten von einem Sortierungstyp in das Suffix _UTF8 zu ändern. Sie können mehr über die Datenbankzusammenstellung von hier lesen.,TE TABLE demovarcharcollate
Rolle von SQL varchar bei Datenkonvertierungen und Datenanzeige
SQL Server varchar wird häufig zur Anzeige von Daten in den gewünschten Formaten unter Verwendung von Convert-und Cast-Funktionen in SQL Server verwendet., Echte Daten befassen sich mit einer Mischung von Datentypen und müssen miteinander kompatibel sein (dh zum selben Datentyp gehören), bevor wir Vergleiche mit ihnen vornehmen. SQL Server unterstützt sowohl implizite als auch explizite Konvertierungen.
- Hinweis: Schauen Sie sich die Funktionsübersicht SQL CAST und SQL CONVERT an, um weitere Informationen darüber zu erhalten, wie wir diese Konvertierungen zur Datenkompatibilität durchführen können.
Mit dem unaufhörlichen Bedürfnis, Daten in der erforderlichen Ausgabe zu formatieren und anzuzeigen, ist SQL varchar sehr praktisch., Als SQL-Entwickler selbst finde ich es äußerst einfach, convert/cast mit dem Datentyp varchar zu verwenden, um Zuweisungen oder Transformationen für Daten durchzuführen, insbesondere für die Datumsfelder.
Ich verwende die Tabelle FactInternetSales aus dem Beispiel DB AdventureWorksDW2017, um zu zeigen, wie diese Funktion funktioniert. Sie können für den Übungszweck auf jede Tabelle mit einigen Datetime-und Money/Float-Feldern verweisen. Das folgende Skript konvertiert zwei Datetime-Spalten in SQL-Varchar-Typen mit den Stilen 102 und 107, um die Daten im Format yyyy.mm.dd bzw., Außerdem wird die SalesAmount-Spalte mit Geld als Datentyp in varchar konvertiert und Stil 3 wird angewendet, um den Betrag mit Kommas anzuzeigen, wie im folgenden Screenshot gezeigt. Darüber hinaus möchten wir beispielsweise nur Daten für die im Jahr 2010 erteilten Aufträge sehen, wobei die CAST-Funktion zum Konvertieren der datetime-Spalte in varchar-Daten verwendet wird, wobei der Zeichenfolgenvergleich in der WHERE-Klausel durchgeführt wird. Sie können auch über SQL convert date gehen, um weitere Informationen zu Datumskonvertierungsformaten und-stilen zu finden.,
Auswirkungen auf die Zeichenfolgenlänge von SQL varchar mit CAST-und Konvertierungsfunktionen
SQL Server speichert lange Zeichenfolgendaten im häufig verwendeten varchar-Datentyp und es wird hilfreich, die erwarteten und maximalen Längen der Zeichenfolgen zu kennen, um die Ergebnisse in der Benutzeroberfläche anzuzeigen. Kopieren und führen Sie den folgenden Code aus, wobei wir eine lange Zeichenfolge in einer varchar-Variablen mit nicht spezifizierter Länge (@demovarchar) und auch in einer anderen Variablen mit einer definierten Varchar-Länge (@demovarcharwithcast) übergeben., Microsoft verwendet 30 als Standardlänge für SQL Varchar (mit nicht spezifizierter Varchar-Länge) im SQL Server, wenn es mit CAST-und CONVERT-Funktionen verwendet wird. In unserem Fall wurde, obwohl die Länge der Zeichenfolge 52 betrug, 30 als Länge zurückgegeben, wie in der letzten Ergebnisausgabe gezeigt.
Ein wichtiger Punkt, der hier zu beachten ist, ist, dass beim Erstellen eines Varchar-Felds mit nicht spezifizierter Länge die Standardlänge eines solchen Felds 1 ist (siehe rote Farbe unten)., Wenn die varchar-Länge nicht angegeben ist und mit CAST-oder CONVERT-Funktionen verwendet wird, gibt der CAST oder CONVERT n=30 als Standard-String-Länge dieser Konvertierung zurück (unten blau markiert).,le‘) ALS ‚LenOFStringPassed‘
Speicher und Leistung überlegungen, die mit SQL varchar
Datentypen wie varchar, char und nvarchar sind alle verwendet zu speichern, die string-Daten in SQL Server., SQL varchar speichert die variable Stringlänge, während SQL char die feste Stringlänge speichert. Dies bedeutet, dass SQL Server varchar nur die Zeichen enthält, die wir ihm zuweisen, und char den maximalen Spaltenraum unabhängig von der Zeichenfolge enthält.
Aufgrund der festen Feldlängen werden Daten direkt aus der Spalte gezogen, ohne Daten zu bearbeiten, und Indexsuchvorgänge gegen varchar sind langsamer als bei char-Feldern. CHAR ist leistungsmäßig besser als VARCHAR, benötigt jedoch unnötigen Speicherplatz, wenn die Daten keine feste Länge haben., In Fällen, in denen die Festplattengröße kein Problem darstellt, wird die Verwendung von CHAR empfohlen.
In einfachen Worten, sagen wir, wir haben eine Spalte mit varchar (150) = ‚SQLShack‘ – Dies dauert 8 Bytes(sqlshack) + 2 Bytes für die Längeninformationen = 10 Bytes tatsächlich und für die Spalte mit char(150) = ‚SQLShack‘ – Dies verbraucht ganze 150 Bytes auf der Festplatte, unabhängig davon, was wir als Zeichenfolge übergeben. Das folgende Beispiel zeigt, wie CHAR den maximal zugewiesenen Speicherplatz (150) verwendet, um in die übergebene Zeichenfolge zu passen, und wie die varchar-Spalte nur den erforderlichen Speicherplatz verwendet.,
Unterm Strich ist es, den Datentyp zu verwenden, der unserem Bedarf entspricht. Sie können SQL varchar verwenden, wenn die Spaltengrößen erheblich variieren, varchar(max) verwenden, wenn die Zeichenfolgenlänge möglicherweise 8000 Byte überschreitet, char verwenden, wenn die Spaltengrößen festgelegt sind, und nvarchar verwenden, wenn Unicode-oder mehrsprachige Daten gespeichert werden müssen.
Schlussfolgerung
Datentypen spielen eine grundlegende Rolle beim Datenbankdesign, werden jedoch häufig übersehen., Ein gutes Verständnis und eine genaue Verwendung von Datentypen stellen sicher, dass Art und Länge der Daten in den Tabellen korrekt ausgefüllt sind. Dieser Tipp soll Ihnen helfen, grundlegende Merkmale und Funktionen von SQL Server varchar sowie dessen Leistungs-und Speicheraspekte in SQL Server zu verstehen. Wir haben auch die jüngsten Fortschritte in SQL varchar in der SQL Server 2019-Vorschau behandelt.
Siehe auch
Sie können sich diese anderen Artikel ansehen, um Ihr Lernen zu SQL-Datentypen fortzusetzen.,
- Verstehen des GUID-Datentyps in SQL Server
- Geodatentypen in SQL Server
- Autor
- Aktuelle Beiträge
Sie hat eine Tiefe Erfahrung in der Projektierung von Daten-und analytics-Lösungen, und die Gewährleistung der Stabilität, Zuverlässigkeit und Leistung. Sie ist auch in SQL Server zertifiziert und hat Zertifizierungen wie 70-463: Implementierung von Data Warehouses mit Microsoft SQL Server bestanden.,
Alle Beiträge von Gauri Mahajan anzeigen
- Azure Analysis Services Modell und Daten erkunden – 4. Februar 2021
- Erste Schritte mit Azure Analysis Services – 13. Databricks data to Power BI Desktop – 1. Juni 2020
Schreibe einen Kommentar