sql >> Database teknologi >  >> RDS >> Sqlserver

Hvornår skal vi bruge NVARCHAR/NCHAR i stedet for VARCHAR/CHAR i SQL Server?

Den virkelige grund til at du vil bruge NVARCHAR er, når du har anderledes sprog i samme kolonne, skal du adressere kolonnerne i T-SQL uden afkodning, du vil kunne se dataene "native" i SSMS, eller du vil standardisere på Unicode.

Hvis du behandler databasen som dum lagring, er det perfekt muligt at gemme brede strenge og forskellige (selv variabel længde) kodninger i VARCHAR (f.eks. UTF-8). Problemet kommer, når du forsøger at indkode og afkode, især hvis kodetabel er forskellig for forskellige rækker. Det betyder også, at SQL Server ikke vil være i stand til nemt at håndtere dataene med det formål at forespørge i T-SQL på (potentielt variabelt) kodede kolonner.

Brug af NVARCHAR undgår alt dette.

Jeg vil anbefale NVARCHAR for enhver kolonne, der vil have brugerindtastede data, som er relativt ubegrænsede.

Jeg vil anbefale VARCHAR for enhver kolonne, der er en naturlig nøgle (som et køretøjs nummerplade, SSN, serienummer, servicemærke, ordrenummer, lufthavnskaldesignal osv.), som typisk er defineret og begrænset af en standard eller lovgivning eller konvention. Også VARCHAR for brugerindtastede og meget begrænsede (som et telefonnummer) eller en kode (AKTIV/LUKKET, J/N, M/F, M/S/D/W osv.). Der er absolut ingen grund til at bruge NVARCHAR til dem.

Så for en simpel regel:

VARCHAR, når det garanteres at være begrænset NVARCHAR ellers



  1. Send ordbog<string,int> til Stored Procedure T-SQL

  2. Sådan undgår du at indsætte duplikerede poster i MySQL

  3. Hvordan castes DATETIME som en DATE i mysql?

  4. Hvordan bruger man sql*plus i Windows kommandoscript til at styre flowet?