Skip to content

¿Cuándo utilizar varchar o nvarchar en SQL Server?

Seguro que en algún programa que has estado desarrollando te has llegado a preguntar por estos tipos de datos. Muchas veces he escuchado discusiones respecto a ellos, diciendo que al ser contenedores de texto, no importaría cuál escoger. Quiero mostrarte en esta publicación que hay una diferencia importante que debes conocer y puedas saber cuándo utilizar varchar o nvarchar en SQL Server.


Clave…Los tipos de datos

Un primer concepto que debe estar muy claro es justamente este. Conocer los tipos de datos y el almacenamiento que tienen es un primer paso para responder la pregunta principal.

En teoría de programación manejamos los mismos conceptos básicos, bajo estos principios, SQL Server te muestra algunas consideraciones propias.


Diferencia principal entre varchar y nvarchar

Como puedes ver en el enlace anterior, la diferencia más importante entre estos tipos de datos es el contenido que pueden tener.

  • varchar: Trabaja solo con caracteres non Unicode
  • nvarchar: Acepta caracteres Unicode

Que esa n remarcada te recuerde que la diferencia también aplica en char y nchar.

En resumen, en Unicode puedes utilizar mayor rango de caracteres en UTF16 que también incluyen otros idiomas (ejemplo caracteres chinos, árabes u otros).

Si quieres saber más detalles, puedes ver la documentación oficial de Microsoft respecto a Unicode.


Ahora veamos un ejemplo

Vamos a hacerlo sencillo. Creamos dos tablas, cada una con una columna de acuerdo al nombre de la tabla. Fíjate la diferencia.


CREATE TABLE TableVarchar
( col varchar(10))

CREATE TABLE TableNvarchar
( col nvarchar(10))

Ahora vamos a insertar 5 registros a cada una


INSERT INTO TableVarchar VALUES
('value1'),
('value2'),
('value3'),
('value4'),
('value5')

INSERT INTO TableNvarchar VALUES
('value1'),
('value2'),
('value3'),
('value4'),
('value5')

¡Bien! Para compararlas necesitamos saber cuánto espacio utiliza cada una de las tablas. No te olvides que tienes en este enlace la herramienta para Generar un Reporte de Tablas, donde también verás el espacio que cada una ocupa.

Entonces ejecutamos el SP del enlace.


EXEC dbo.sp_ReportUserDbTables
Tamaños y espacios

¿Alguna diferencia?

Pues parece que no. Es así que muchos piensan que no existe diferencia entre estos tipos de datos y que podríamos utilizar cualquiera.

Hagamos algo más grande.

Insertemos más registros en la tabla y veamos nuevamente el resultado.


SET NOCOUNT ON

INSERT INTO TableVarchar VALUES ('valueX')
GO 100000


INSERT INTO TableNvarchar VALUES ('valueX')
GO 100000


EXEC dbo.sp_ReportUserDbTables
cuando-utilizar-varchar-o-nvarchar
Tamaños y espacios

¿Alguna diferencia?


Saber decidir se vuelve importante

Nuevamente te reitero puedas revisar los conceptos sobre los tipos de datos. Si lo viste, pues entenderás que los tipos de datos nchar o nvarchar ocupan el doble de espacio físico que un dato char o varchar.

Esto también es muy fácil de verificarlo.


SELECT TOP 1 DATALENGTH(col) as VarcharSize
FROM TableVarchar

SELECT TOP 1 DATALENGTH(col) as NvarcharSize
FROM TableNvarchar
utilizar-varchar-o-nvarchar

¿Entonces cuándo utilizar varchar o nvarchar?

Utiliza el que cumpla con tus necesidades. Particularmente yo te aconsejo iniciar con char o varchar y si necesitas caracteres Unicode, recién apuntar a nchar o nvarchar.

Tienes que entender que la necesidad de espacios físicos que tiene cada tipo de dato puede influir bastante en tu diseño. No creo que solo tengas tablas con una sola columna como en el ejemplo. Seguro que también tienen un par de índices por allí.

El espacio físico puede hacer la diferencia cuando hablamos de performance. Tipos de datos no adecuados pueden causar tiempos de espera tipo PAGEIOLATCH.

Como en todo, es importante siempre realices un Testing adecuado en tus programas.

Te adelanto algo. Estos conceptos son válidos hasta SQL Server 2017 y pueden cambiar en las nuevas versiones. Puedes ver un poco de Qué trae de nuevo SQL Server 2019.

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Carrito
Volver arriba