De echte reden waarom u NVARCHAR wilt gebruiken, is wanneer u andere . heeft talen in dezelfde kolom, moet u de kolommen in T-SQL adresseren zonder te decoderen, wilt u de gegevens "native" in SSMS kunnen zien, of u wilt standaardiseren op Unicode.
Als je de database behandelt als domme opslag, is het perfect mogelijk om brede strings en verschillende (zelfs variabele lengte) coderingen op te slaan in VARCHAR (bijvoorbeeld UTF-8). Het probleem doet zich voor wanneer u probeert te coderen en decoderen, vooral als de codepagina voor verschillende rijen anders is. Het betekent ook dat de SQL Server de gegevens niet gemakkelijk zal kunnen verwerken voor doeleinden van query's binnen T-SQL op (mogelijk variabel) gecodeerde kolommen.
Door NVARCHAR te gebruiken, wordt dit allemaal vermeden.
Ik zou NVARCHAR aanbevelen voor elke kolom die door de gebruiker ingevoerde gegevens bevat die relatief onbeperkt zijn.
Ik zou VARCHAR aanbevelen voor elke kolom die een natuurlijke sleutel is (zoals een kentekenplaat, SSN, serienummer, servicetag, bestelnummer, luchthavenroepnaam, enz.) die doorgaans wordt gedefinieerd en beperkt door een norm of wetgeving of conventie. Ook VARCHAR voor door de gebruiker ingevoerd en zeer beperkt (zoals een telefoonnummer) of een code (ACTIEF/GESLOTEN, J/N, M/V, M/S/D/W, enz.). Er is absoluut geen reden om NVARCHAR daarvoor te gebruiken.
Dus voor een simpele regel:
VARCHAR indien gegarandeerd beperktNVARCHAR anders