Saltar al contenido

¿Cuál es la diferencia entre char, nchar, varchar y nvarchar en SQL Server?

Solución:

Solo para aclarar … o resumir …

  • nchar y nvarchar puede almacenar Unicode caracteres.
  • char y varchar no se puede almacenar Unicode caracteres.
  • char y nchar están longitud fija que lo hará reservar espacio de almacenamiento para el número de caracteres que especifique incluso si no utiliza todo ese espacio.
  • varchar y nvarchar están Longitud variable que solo utilizará espacios para los personajes que almacenes. Eso no reservará almacenamiento como char o nchar.

nchar y nvarchar ocuparán el doble de espacio de almacenamiento, por lo que puede ser aconsejable utilizarlos solo si los necesita Unicode apoyo.

Todas las respuestas hasta ahora indican que varchar es de un solo byte, nvarchar es de doble byte. La primera parte de esto realmente depende de la intercalación, como se ilustra a continuación.

DECLARE @T TABLE
(
C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,
C2 NVARCHAR(20)COLLATE  Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS
)

INSERT INTO @T 
    VALUES (N'中华人民共和国',N'中华人民共和国'),
           (N'abc',N'abc');

SELECT C1,
       C2,
       LEN(C1)        AS [LEN(C1)],
       DATALENGTH(C1) AS [DATALENGTH(C1)],
       LEN(C2)        AS [LEN(C2)],
       DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM   @T  

Devoluciones

ingrese la descripción de la imagen aquí

Tenga en cuenta que el y Los personajes todavía no estaban representados en el VARCHAR versión y fueron reemplazados silenciosamente con ?.

En realidad, todavía no hay caracteres chinos que puedan ser representados por un solo byte en esa intercalación. Los únicos caracteres de un solo byte son el conjunto típico de ASCII occidental.

Debido a esto, es posible que un inserto de un nvarchar(X) columna a una varchar(X) columna fallar con un error de truncamiento (donde X denota un número que es el mismo en ambos casos).

SQL Server 2012 agrega intercalaciones SC (carácter complementario) que admiten UTF-16. En estas colaciones un solo nvarchar El carácter puede ocupar 2 o 4 bytes.

nchar y char funcionan prácticamente de la misma manera entre sí, al igual que nvarchar y varchar. La única diferencia entre ellos es que nchar / nvarchar almacenan caracteres Unicode (esencial si necesita el uso de conjuntos de caracteres extendidos) mientras que varchar no.

Debido a que los caracteres Unicode requieren más almacenamiento, los campos nchar / nvarchar ocupan el doble de espacio (por ejemplo, en versiones anteriores de SQL Server, el tamaño máximo de un campo nvarchar es 4000).

Esta pregunta es un duplicado de esta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *