340 votos

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

¿Qué se entiende por nvarchar ?

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

485voto

Brian Kim Puntos 8951

Sólo para aclarar... o resumir...

  • nchar y nvarchar puede almacenar Unicode personajes.
  • char y varchar no puede almacenar Unicode personajes.
  • char y nchar son de longitud fija que reservar espacio de almacenamiento para el número de caracteres que especifique, incluso si no utiliza todo el espacio.
  • varchar y nvarchar son de longitud variable que sólo utilizará espacios para los caracteres que almacene. Es 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 sólo si necesita soporte Unicode.

49voto

Martin Smith Puntos 174101

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 compaginació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'中华人民共和国')

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

Devuelve

LEN(C1)     DATALENGTH(C1) LEN(C2)     DATALENGTH(C2)
----------- -------------- ----------- --------------
7           12             7           14

Y Sql Server 2012 añade colaciones SC (caracteres suplementarios) que admiten UTF-16 . En estos cotejos un único nvarchar puede ocupar 2 ó 4 bytes.

33voto

Luke Bennett Puntos 16100

nchar y char funcionan prácticamente igual, al igual que nvarchar y varchar. La única diferencia entre ellos es que nchar/nvarchar almacenan caracteres Unicode (esencial si se requiere el uso de conjuntos de caracteres extendidos) mientras que varchar no lo hace. Como los caracteres Unicode requieren más almacenamiento, los campos nchar/nvarchar ocupan el doble de espacio (así, por ejemplo, en versiones anteriores de Sql Server el tamaño máximo de un campo nvarchar es de 4000).

Editar : Esta pregunta es un duplicado de este .

22voto

Dimuthu Puntos 151

Sólo para añadir algo más: nchar - añade espacios finales a los datos. nvarchar - no añade espacios finales a los datos.

Por lo tanto, si va a filtrar su conjunto de datos por un campo 'nchar', puede utilizar RTRIM para eliminar los espacios. Por ejemplo El campo nchar(10) llamado BRAND almacena la palabra NIKE. Añade 6 espacios a la derecha de la palabra. Por lo tanto, al filtrar, la expresión debería decir: RTRIM(Campos!MARCA.Valor) = "NIKE"

¡Espero que esto ayude a alguien por ahí, porque yo estaba luchando con él un poco justo ahora!

12voto

ss. Puntos 111
  • char : datos de caracteres de longitud fija con una longitud máxima de 8000 caracteres.
  • nchar : datos unicode de longitud fija con una longitud máxima de 4000 caracteres.
  • Char = 8 bits de longitud
  • NChar = 16 bits de longitud

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X