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 los char, nchar, varchary nvarchar en SQL Server?

485voto

Brian Kim Puntos 8951

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

  • nchar y nvarchar puede almacenar Unicode de caracteres.
  • char y varchar no puede almacenar Unicode de caracteres.
  • char y nchar son de longitud fija , que se reserva espacio de almacenamiento para el número de caracteres que especifique incluso si usted no los usa todo el espacio.
  • varchar y nvarchar son de longitud variable que sólo se use espacios para que los personajes de la tienda. Que no almacenamiento de reserva, como char o nchar.

nchar y nvarchar tomará hasta dos veces la cantidad de espacio de almacenamiento, por lo que es aconsejable usar sólo si usted necesita soporte de Unicode.

49voto

Martin Smith Puntos 174101

Todas las respuestas hasta el momento indican que varchar es de un solo byte, nvarchar es de doble byte. La primera parte de esta realidad depende de 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'中华人民共和国')

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

Devoluciones

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

Y SQL Server 2012 agrega SC (Carácter Complementario) intercalaciones de apoyo UTF-16. En estas intercalaciones de un único nvarchar carácter puede tomar 2 o 4 bytes.

33voto

Luke Bennett Puntos 16100

nchar y char bastante operan exactamente de la misma manera como cada uno de los otros, como los de tipo nvarchar y varchar. La única diferencia entre ellos es que nchar o nvarchar almacenar caracteres Unicode (esencial si requieren el uso de juegos de caracteres extendidos), mientras varchar no. Porque caracteres Unicode requieren más espacio de almacenamiento, nchar o nvarchar campos ocupan el doble de espacio (así, por ejemplo, en versiones anteriores de SQL Server, el tamaño máximo de un campo es de tipo nvarchar 4000).

Edit: Esta pregunta es un duplicado de este.

22voto

Dimuthu Puntos 151

Solo para agregar algo más: nchar - agrega espacios a los datos. de tipo nvarchar - no agregar espacios a los datos.

Por lo tanto, si usted va a filtrar el conjunto de datos por un 'nchar campo, puede que desee utilizar RTRIM para quitar los espacios. Por ejemplo. nchar(10) campo llamado de la MARCA de tiendas de la palabra de NIKE. Añade 6 espacios a la derecha de la palabra. Así, cuando el filtrado, la expresión debe leer: RTRIM(Fields!BRAND.Value) = "NIKE"

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

12voto

ss. Puntos 111
  • char: de longitud fija de datos de caracteres 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