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: Skal jeg bruke nvarchar eller skal jeg bruke varchar?

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

Jeg hører argumentet om plass, men plass er billig og ikke verdt å bekymre seg for. 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 anvendt på nchar og nvarchar (nvarchar(max) er ekskludert) felt. Avhengig av dataene varierer effektiviteten til komprimeringen, men med engelsk er det 50% komprimering, som setter det på linje med varchar’s plassbehov (1).

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

Dette StackOverflow-svaret oppsummerer nvarchar vs. varchar:

En nvarchar-kolonne kan lagre alle Unicode-data. En varchar-kolonne er begrenset til en 8-bit kodeside. Noen folk tror at varchar bør brukes fordi det tar opp mindre plass. Jeg tror ikke dette er det riktige svaret. Kodeside-inkompatibiliteter er et problem, og Unicode er kuren for kodesideproblemer. Med billige disker og minne i dag, er det virkelig ingen grunn til å kaste bort tid på å rote 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 har grensesnitt med en applikasjon som bare bruker ASCII, ville jeg fortsatt anbefale å bruke Unicode i databasen. OS og database kollasjonsalgoritmer vil fungere bedre med Unicode. Unicode unngår konverteringsproblemer når du har grensesnitt med andre systemer. Og du vil forberede deg for fremtiden. Og du kan alltid validere at dataene dine er begrenset til 7-bit ASCII for hvilket som helst legacy-system du må vedlikeholde, selv mens du nyter noen av fordelene med full Unicode-lagring. (2)

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

Referanser:

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

Forfatter: Chuck Conway spesialiserer seg på programvareutvikling og Generativ AI. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube.

↑ Tilbake til toppen

Du liker kanskje også