Skip to content

Beiträge

NVarchar vs. Varchar

5. August 2020 • 2 min Lesezeit

NVarchar vs. Varchar

Jeder Ingenieur, der eine neue Zeichenspalte definiert, entscheidet: Verwende ich nvarchar oder varchar?

Seit ich nvarchar entdeckt habe, verwende ich immer nvarchar. Mein Gedanke ist: Warum einen Datentyp verwenden, der möglicherweise einen Textwert nicht unterstützt, und man wird eine Inkompatibilität wahrscheinlich erst in der Produktion entdecken?

Ich höre das Argument über Speicherplatz, aber Speicherplatz ist günstig und nicht der Rede wert. Ich weiß, was du denkst: Die Kosten spielen keine Rolle, wenn die Festplatte voll ist, und ich stimme dir zu.

Ab SQL Server 2008 R2 wird Datenkomprimierung auf nchar- und nvarchar-Felder angewendet (nvarchar(max) ist ausgenommen). Je nach Daten variiert die Effektivität der Komprimierung, aber bei Englisch gibt es eine 50%-Komprimierung, was es auf den gleichen Speicherbedarf wie varchar bringt (1).

Ein weiterer Punkt ist, dass die meisten Programmiersprachen UTF-16 als Zeichentyp unterstützen. Jedes Mal, wenn ein varchar aus der Datenbank geladen wird, wird es zu UTF-16 konvertiert (nvarchar-ähnlich).

Diese StackOverflow-Antwort fasst nvarchar vs. varchar zusammen:

Eine nvarchar-Spalte kann beliebige Unicode-Daten speichern. Eine varchar-Spalte ist auf eine 8-Bit-Codepage beschränkt. Einige Leute denken, dass varchar verwendet werden sollte, weil es weniger Platz benötigt. Ich glaube, das ist nicht die richtige Antwort. Codepage-Inkompatibilitäten sind lästig, und Unicode ist die Lösung für Codepage-Probleme. Bei günstigen Festplatten und Speicher heutzutage gibt es wirklich keinen Grund mehr, Zeit mit Codepages zu verschwenden.

Alle modernen Betriebssysteme und Entwicklungsplattformen verwenden Unicode intern. Durch die Verwendung von nvarchar statt varchar können Sie Kodierungskonvertierungen jedes Mal vermeiden, wenn Sie aus der Datenbank lesen oder in sie schreiben. Konvertierungen kosten Zeit und sind fehleranfällig. Und die Wiederherstellung von Konvertierungsfehlern ist ein nicht triviales Problem.

Wenn Sie mit einer Anwendung arbeiten, die nur ASCII verwendet, würde ich trotzdem empfehlen, Unicode in der Datenbank zu verwenden. Die Betriebssystem- und Datenbank-Sortieralgorithmen funktionieren besser mit Unicode. Unicode vermeidet Konvertierungsprobleme bei der Schnittstelle mit anderen Systemen. Und Sie bereiten sich auf die Zukunft vor. Und Sie können immer überprüfen, dass Ihre Daten auf 7-Bit-ASCII für jedes Legacy-System beschränkt sind, das Sie verwalten müssen, während Sie gleichzeitig von den Vorteilen des vollständigen Unicode-Speichers profitieren. (2)

Meine Schlussfolgerung ist, dass die Daten nur dann varchar sind, wenn sie sich in Ruhe befinden.

Referenzen:

1. Unicode Compression implementation
2. What is the difference between varchar and nvarchar?

Autor: Chuck Conway ist ein KI-Ingenieur mit fast 30 Jahren Erfahrung in der Softwareentwicklung. Er entwickelt praktische KI-Systeme – Content-Pipelines, Infrastruktur-Agenten und Tools, die echte Probleme lösen – und teilt seine Erkenntnisse unterwegs. Verbinden Sie sich mit ihm in den sozialen Medien: X (@chuckconway) oder besuchen Sie ihn auf YouTube und auf SubStack.

↑ Nach oben

Das könnte dir auch gefallen