Von: Sherlee Dizon | Aktualisiert: 2016-06-14 | Comments (4) | Related: 1 | 2 | 3 | Mehr > Datentypen
Problem
Die Unterschiede der SQL Server-Datentypen char, nchar, varchar und nvarchar werden nicht nur in Interviews, sondern auch von Entwicklern bei Diskussionen über das Datenbankdesign häufig diskutiert. In diesem Tipp möchte ich nicht nur die grundlegenden Unterschiede erläutern, sondern auch, was man bei der Verwendung der einzelnen Datentypen wissen und beachten muss.
Lösung
Char, nchar, varchar und nvarchar werden alle verwendet, um Text- oder Zeichenkettendaten inSQL-Server-Datenbanken zu speichern.
- char – ist das SQL-92-Synonym für character. Daten werden mit Leerzeichen/Leerzeichen aufgefüllt, um die Feldgröße zu füllen. Datentyp mit fester Länge.
- nchar – ist das SQL-92-Synonym für national char und national character.Datentyp mit fester Länge.
- varchar – ist das SQL-92-Synonym für variable Zeichen. Datentyp mit variabler Länge.
- nvarchar – ist das SQL-92-Synonym für national char varying und nationalcharacter varying. Datentyp mit variabler Länge.
Was bedeutet N in SQL Server
Sie fragen sich vielleicht, wofür das N steht? N steht fürNational Language Character Set und wird verwendet, um eine Unicode-Zeichenfolge anzugeben. Bei der Verwendung von Unicode-Datentypen kann eine Spalte jedes Zeichen speichern, das durch den Unicode-Standard definiert ist, der alle in den verschiedenen Zeichensätzen definierten Zeichen umfasst. Beachten Sie, dass Unicode-Datentypen doppelt so viel Speicherplatz benötigen wie Nicht-Unicode-Datentypen.
Unicode wird typischerweise in Datenbankanwendungen verwendet, die dafür ausgelegt sind, Codeseiten zu ermöglichen, die über die englischen und westeuropäischen Codeseiten hinausgehen. Es ist so konzipiert, dass erweiterte Zeichensätze noch in Datenbankspalten „passen“ können.
Das bedeutet, dass Unicode-Zeichen-Datentypen auf die Hälfte des Platzes beschränkt sind, da jedes Byte tatsächlich zwei Bytes benötigt, um die Daten zu speichern (Unicode wird manchmal als „doppelt breit“ bezeichnet). SQL Server unterstützt Unicode seit SQL Server7.0 durch die Bereitstellung der Datentypen nchar/nvarchar/ntext. SQL Server unterstützt keineUTF-8-Kodierung für Unicode-Daten, aberUTF-16-Kodierung.
Ich habe unten eine Tabelle erstellt, die als Schnellreferenz dienen soll.
Unterschiede von char, nchar, varchar und nvarchar in SQL Server
char | nchar | varchar | nvarchar | |||
---|---|---|---|---|---|---|
Zeichen-Datentyp | Non-Unicode feste Länge | Unicode feste Länge kann sowohl Nicht-Unicode- als auch Unicode-Zeichen speichern (d.d. h. Japanisch, Koreanisch usw.) | Nicht-Unicode variable Länge | Unicode variable Länge kann sowohl Nicht-Unicode- als auch Unicode-Zeichen speichern (d. h. Japanisch, Koreanisch usw.) | ||
Maximale Länge | bis zu 8.000 Zeichen | bis zu 4.000 Zeichen | bis zu 8.000 Zeichen | bis zu 4,000 Zeichen | ||
Zeichengröße | beansprucht 1 Byte pro Zeichen | beansprucht 2 Bytes pro Unicode/Non-Unicode-Zeichen | beansprucht 1 Byte pro Zeichen | beansprucht 2 Bytes pro Unicode/Non-Unicode-Zeichen | ||
Speichergröße | n Bytes | 2 mal n Bytes | Ist-Länge (in Bytes) | 2 mal Ist-Länge (in Bytes) | ||
Anwendung | Verwendung bei konstanter Datenlänge oder Spalten mit fester Länge | nur verwenden, wenn Sie Unicode-Unterstützung benötigen, wie z.B. die japanischen Kanji oder koreanischenHangul-Zeichen aufgrund des Speicher-Overheads | verwendet, wenn die Datenlänge variabel ist oder Spalten mit variabler Länge und wenn die tatsächliche Daten immer weit unter der Kapazität liegen | nur verwendet, wenn Sie Unicode-Unterstützung wie die japanischen Kanji- oder koreanischenHangul-Zeichen aufgrund des Speicher-Overheads benötigen | ||
Abfrage, die einen varchar-Parameter verwendet, führt aufgrund von Spaltenkollationssätzen einen Indexsuchlauf durch | Abfrage, die einen nvarchar-Parameter verwendet, führt aufgrund von Spaltenkollationssätzen einen Indexsuchlauf durch |
Vorteile und Nachteile von char, nchar, varchar und nvarchar in SQLServer
Datentypen | Vorteile | Nachteile |
---|---|---|
char | Die Abfrageleistung ist besser, da die Spalte beim Aktualisieren nicht verschoben werden muss. Es ist nicht nötig, die Länge der Zeichenkette in den letzten zwei Bytes zu speichern. |
Wenn es nicht richtig verwendet wird, kann es mehr Platz als varchar einnehmen, da es eine feste Länge hat und wir die Länge der zu speichernden Zeichenfolge nicht kennen. Es ist nicht gut für die Komprimierung, da es Leerzeichen am Ende einbettet. |
varchar | Da es eine variable Länge hat, benötigt es weniger Speicherplatz. | Verringert die Leistung einiger SQL-Abfragen. |
nchar/nvarchar | Unterstützt viele Client-Computer, auf denen verschiedene Gebietsschemata laufen. | Wenn es nicht richtig verwendet wird, kann es viel zusätzlichen Speicherplatz verbrauchen. |
Mit dem Wachstum und der Innovation von Web-Anwendungen ist es noch wichtiger geworden, Client-Computer zu unterstützen, auf denen verschiedene Gebietsschemata laufen. Der einfachste Weg, Zeichendaten in internationalen Datenbanken zu verwalten, besteht darin, immer die Datentypen Unicodechar, nvarchar und ntext anstelle ihrer Nicht-Unicode-Entsprechungen char, varchar und text zu verwenden.
Unicode ist ein Standard für die Abbildung von Codepunkten auf Zeichen. Da er so konzipiert ist, dass er alle Zeichen aller Sprachen der Welt abdeckt, gibt es keine Notwendigkeit für verschiedene Codepages, um verschiedene Zeichensätze zu behandeln. SQL Server unterstützt den Unicode-Standard, Version 3.2. Wenn alle Anwendungen, die mit internationalen Datenbanken arbeiten, ebenfalls Unicode-Variablen anstelle von Nicht-Unicode-Variablen verwenden, müssen nirgendwo im System Zeichenübersetzungen vorgenommen werden. Die Clients sehen dann die gleichen Zeichen in den Daten wie alle anderen Clients.
SQL Server speichert alle textuellen Systemkatalogdaten in Spalten mit Unicode-Datentypen. Die Namen von Datenbankobjekten, wie z. B. Tabellen, Ansichten und gespeicherte Prozeduren, werden in Unicode-Spalten gespeichert. Dies ermöglicht die Entwicklung von Anwendungen, die ausschließlich Unicode verwenden, und hilft, Probleme mit Codepage-Konvertierungen zu vermeiden.
Denken Sie bei der Entwicklung neuer Anwendungen daran, ob diese global eingesetzt werden sollen, denn dies hilft Ihnen bei der Entscheidung, ob Sie nchar und nvarchar zur Unterstützung verschiedener Sprachen verwenden sollen.
Nächste Schritte
Lernen Sie mehr, indem Sie das Folgende lesen und erforschen:
- Nehmen Sie sich die Zeit, auch diesen Tipp zu lesen, der Ihnen bei der Planung Ihres Datenbankdesigns helfen könnteDefinieren von Datentypen und -größen
- Erfahren Sie mehr über die Bedeutung der Konsistenz von DatentypenSQL Server Data Type Consistency
- Vergleichen Sie die Datentypen von SQL Server und Oracle
- Wenn Sie eine Anwendung haben, die Sie global einsetzen wollen, versuchen Sie, mitglobalen Zeichen zu experimentieren. Wer weiß, wenn Sie erfolgreich sind, könnten Sie Ihren Umsatz steigern und Ihre Anwendungen auf die nächste Ebene bringen.
Last Updated: 2016-06-14
Über den Autor
Alle meine Tipps ansehen