Cada ingeniero que define una nueva columna de cadena decide: ¿Uso nvarchar o uso varchar?
Desde que descubrí nvarchar, siempre he usado nvarchar. Mi pensamiento es, ¿por qué usar un tipo de dato que puede no soportar un valor de texto, y probablemente no descubrirás una incompatibilidad de valor hasta que esté en producción?
Escucho el argumento sobre el espacio, pero el espacio es barato y no vale la pena preocuparse. Sé lo que estás pensando, el costo no importa cuando el disco duro está lleno, y estoy de acuerdo.
A partir de Sql Server 2008 R2, la compresión de datos se aplica a los campos nchar y nvarchar (nvarchar(max) está excluido). Dependiendo de los datos, la efectividad de la compresión varía, pero con inglés, hay una compresión del 50%, lo que la pone a la par con las necesidades de espacio de varchar (1).
Otra cosa a considerar es que la mayoría de los lenguajes de programación soportan UTF-16 como tipo de cadena. Entonces, cada vez que se carga un varchar de la base de datos, se convierte a UTF-16 (nvarchar-ish)
Esta respuesta de StackOverflow resume nvarchar vs. varchar:
Una columna nvarchar puede almacenar cualquier dato Unicode. Una columna varchar está restringida a una página de códigos de 8 bits. Algunas personas piensan que varchar debe usarse porque ocupa menos espacio. Creo que esta no es la respuesta correcta. Las incompatibilidades de página de códigos son un dolor, y Unicode es la cura para los problemas de página de códigos. Con disco y memoria baratos hoy en día, realmente no hay razón para perder tiempo jugando con páginas de códigos.
Todos los sistemas operativos modernos y las plataformas de desarrollo usan Unicode internamente. Al usar nvarchar en lugar de varchar, puede evitar hacer conversiones de codificación cada vez que lee o escribe en la base de datos. Las conversiones toman tiempo y son propensas a errores. Y la recuperación de errores de conversión es un problema no trivial.
Si está interfazando con una aplicación que usa solo ASCII, aún recomendaría usar Unicode en la base de datos. Los algoritmos de intercalación del sistema operativo y la base de datos funcionarán mejor con Unicode. Unicode evita problemas de conversión al interfazarse con otros sistemas. Y se estará preparando para el futuro. Y siempre puede validar que sus datos estén restringidos a ASCII de 7 bits para cualquier sistema heredado que tenga que mantener, mientras disfruta de algunos de los beneficios del almacenamiento Unicode completo. (2)
Mi conclusión es que la única vez que los datos son varchar es cuando están en reposo.
Referencias:
1. Unicode Compression implementation
2. What is the difference between varchar and nvarchar?
Autor: Chuck Conway es un Ingeniero de IA con casi 30 años de experiencia en ingeniería de software. Construye sistemas de IA prácticos—canalizaciones de contenido, agentes de infraestructura y herramientas que resuelven problemas reales—y comparte lo que está aprendiendo en el camino. Conéctate con él en redes sociales: X (@chuckconway) o visítalo en YouTube y en SubStack.