Skip to content

Innlegg

NVarchar Vs Varchar

5. august 2020 • 2 min lesing

NVarchar Vs Varchar

Hver ingeniør som definerer en ny strengkolonne bestemmer: Bruker jeg nvarchar eller bruker jeg varchar?

Siden jeg oppdaget nvarchar, har jeg alltid brukt nvarchar. Min tanke er, hvorfor bruke en datatype som kanskje ikke støtter en tekstverdi, og du vil sannsynligvis ikke oppdage en inkompatibilitet før den er i produksjon.

Jeg hører argumentet om plass, men plass er billig og ikke verdt å bekymre seg om. Jeg vet hva du tenker, kostnaden spiller ingen rolle når harddisken er full, og jeg er enig.

Fra og med Sql Server 2008 R2 blir datakomprimering brukt på nchar og nvarchar (nvarchar(max) er ekskludert) felt. Avhengig av dataene varierer effektiviteten av komprimeringen, men med engelsk er det 50% komprimering, som setter det på linje med varchar’s plassbehovet (1).

Noe annet å vurdere er at de fleste programmeringsspråk støtter UTF-16 som strengtypen. Så hver gang en varchar lastes fra databasen, konverteres den til UTF-16 (nvarchar-ish)

Dette StackOverflow-svaret oppsummerer nvarchar vs. varchar:

En nvarchar-kolonne kan lagre alle Unicode-data. En varchar-kolonne er begrenset til en 8-bits kodeside. Noen mennesker tror at varchar bør brukes fordi det tar opp mindre plass. Jeg mener dette ikke er det riktige svaret. Kodeside-inkompatibilitet er plagsomt, og Unicode er kuren for kodeside-problemer. Med billig disk og minne i dag, er det virkelig ingen grunn til å kaste bort tid på å mekle med kodesider lenger.

Alle moderne operativsystemer og utviklingsplattformer bruker Unicode internt. Ved å bruke nvarchar i stedet for varchar, kan du unngå å gjøre kodingskonverteringer hver gang du leser fra eller skriver til databasen. Konverteringer tar tid og er utsatt for feil. Og gjenoppretting fra konverteringsfeil er et ikke-trivielt problem.

Hvis du grensesnitter med et program som bare bruker ASCII, vil jeg fortsatt anbefale å bruke Unicode i databasen. Operativsystemet og databasens sorteringsalgoritmer vil fungere bedre med Unicode. Unicode unngår konverteringsproblemer når du grensesnitter med andre systemer. Og du vil forberede deg for fremtiden. Og du kan alltid validere at dataene dine er begrenset til 7-bits ASCII for hvilket som helst eldre system du må vedlikeholde, mens du fortsatt nyter noen av fordelene med full Unicode-lagring. (2)

Min konklusjon er at den eneste gangen dataene er en varchar er når den er i ro.

Referanser:

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

Forfatter: Chuck Conway er en AI-ingeniør med nesten 30 års erfaring innen programvareutvikling. Han bygger praktiske AI-systemer—innholdspipelines, infrastrukturagenter og verktøy som løser virkelige problemer—og deler det han lærer underveis. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube og på SubStack.

↑ Tilbake til toppen

Du kan også like