Lo primero para empezar el trabajo con SQL Server es preparar el ambiente. La instalación…
¿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
¿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
¿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
¿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.