Alasan sebenarnya Anda ingin menggunakan NVARCHAR adalah ketika Anda memiliki berbeda bahasa di kolom yang sama, Anda perlu menangani kolom di T-SQL tanpa decoding, Anda ingin dapat melihat data "asli" di SSMS, atau Anda ingin standar pada Unicode.
Jika Anda memperlakukan database sebagai penyimpanan bodoh, sangat mungkin untuk menyimpan string lebar dan pengkodean yang berbeda (bahkan panjang variabel) di VARCHAR (misalnya UTF-8). Masalahnya muncul ketika Anda mencoba untuk menyandikan dan mendekode, terutama jika halaman kode berbeda untuk baris yang berbeda. Ini juga berarti bahwa SQL Server tidak akan dapat menangani data dengan mudah untuk tujuan kueri dalam T-SQL pada kolom yang dikodekan (berpotensi bervariasi).
Menggunakan NVARCHAR menghindari semua ini.
Saya akan merekomendasikan NVARCHAR untuk kolom apa pun yang memiliki data yang dimasukkan pengguna di dalamnya yang relatif tidak dibatasi.
Saya akan merekomendasikan VARCHAR untuk kolom apa pun yang merupakan kunci alami (seperti plat nomor kendaraan, SSN, nomor seri, tag layanan, nomor pesanan, tanda panggilan bandara, dll) yang biasanya ditentukan dan dibatasi oleh standar atau undang-undang atau konvensi. Juga VARCHAR untuk dimasukkan pengguna, dan sangat dibatasi (seperti nomor telepon) atau kode (AKTIF/TUTUP, Y/N, M/F, M/S/D/W, dll). Sama sekali tidak ada alasan untuk menggunakan NVARCHAR untuk itu.
Jadi untuk aturan sederhana:
VARCHAR ketika dijamin dibatasiNVARCHAR sebaliknya