Skutečný důvod, proč chcete používat NVARCHAR, je, když máte jiné jazyků ve stejném sloupci, potřebujete adresovat sloupce v T-SQL bez dekódování, chcete mít možnost vidět data "nativně" v SSMS nebo chcete standardizovat na Unicode.
Pokud s databází zacházíte jako s hloupým úložištěm, je dokonale možné ukládat široké řetězce a různá (dokonce i proměnné délky) kódování ve VARCHAR (například UTF-8). Problém nastává, když se pokoušíte kódovat a dekódovat, zejména pokud se kódová stránka liší pro různé řádky. Znamená to také, že SQL Server nebude schopen snadno pracovat s daty pro účely dotazování v T-SQL na (potenciálně variabilně) zakódované sloupce.
Pomocí NVARCHAR se tomu všemu vyhnete.
Doporučil bych NVARCHAR pro jakýkoli sloupec, který bude obsahovat data zadaná uživatelem, která jsou relativně neomezená.
Doporučil bych VARCHAR pro jakýkoli sloupec, který je přirozeným klíčem (jako SPZ vozidla, SSN, sériové číslo, servisní štítek, číslo objednávky, volací značka letiště atd.), který je obvykle definován a omezen normou nebo legislativou nebo konvencí. Také VARCHAR pro uživatelem zadané a velmi omezené (jako telefonní číslo) nebo kód (AKTIVNÍ/ZAVŘENÉ, Y/N, M/F, M/S/D/W atd.). Není absolutně žádný důvod pro to používat NVARCHAR.
Takže pro jednoduché pravidlo:
VARCHAR, pokud je zaručeno, že bude omezen NVARCHAR jinak