NVarchar Vs Varchar
5 de agosto de 2020 • 3 min de lectura

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 un valor incompatible hasta que esté en producción?
Escucho el argumento sobre el espacio, pero el espacio es barato y no vale la pena preocuparse por ello. 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 se aplica compresión de datos 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 lo pone a la par con las necesidades de espacio de varchar
(1).
Algo más a considerar es que la mayoría de los lenguajes de programación soportan UTF-16 como el tipo de cadena. Así que cada vez que un varchar
se carga desde 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 debería usarse porque ocupa menos espacio. Creo que esta no es la respuesta correcta. Las incompatibilidades de páginas de códigos son una molestia, y Unicode es la cura para los problemas de páginas de códigos. Con discos y memoria baratos hoy en día, realmente no hay razón para perder tiempo lidiando con páginas de códigos.
Todos los sistemas operativos modernos y plataformas de desarrollo usan Unicode internamente. Al usar nvarchar en lugar de varchar, puedes evitar hacer conversiones de codificación cada vez que lees o escribes 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ás 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 SO y la base de datos funcionarán mejor con Unicode. Unicode evita problemas de conversión al interfazar con otros sistemas. Y te estarás preparando para el futuro. Y siempre puedes validar que tus datos estén restringidos a ASCII de 7 bits para cualquier sistema heredado que tengas que mantener, incluso mientras disfrutas 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?
También te puede gustar
- Modificar un Archivo Localmente Sin Actualizar el Repositorio Git Remoto 1 min de lectura
- Una Implementación de Búsqueda Binaria 1 min de lectura
- Los Beneficios de Usar un Framework de Construcción 2 min de lectura