- VARCHAR does not store Unicode characters.
- NVARCHAR does store Unicode characters.
- Today's applications should always be Unicode compatible.
- NVARCHAR takes twice the amount of space to store it.
- Point 4 doesn't matter because storage space is extremely inexpensive.
Ergo: When designing SQL Server databases today, one should always use NVARCHAR.
Is this sound reasoning? Does anyone disagree with any of the premises? Are there any reasons to choose VARCHAR over NVARCHAR today?
I have seen nvarchar columns converted to varchar for two reasons:
Application is using MSSQL Express Edition, which has 4GB database size limit. Switching to MSSQL Standard Edition would be too expensive if there are many database deployments, as would be in single-tenant webapps or applications with embedded DBMS. The cheaper SQL2008 Web Edition could help here.
nvarchar(4000) is not enough but you don't want an ntext column. So you convert to varchar(8000). However, in most cases you probably should convert to nvarchar(max).
I'd say that there are still valid reasons to not use nvarchar.
However new development should probably use nvarchar esp. since 64-bit systems are becoming the norm. Also, companies (even small ones) are now more commonly global.