¿Cuál es la diferencia entre char, nchar, varchar y nvarchar en SQL Server?
Qué quiere decir nvarchar
?
¿Cuál es la diferencia entre char
, nchar
, varchar
y nvarchar
en SQL Server?
Sólo para aclarar... o resumir...
nchar
ynvarchar
puede almacenar caracteres Unicode .char
y no puede almacenar caracteres Unicode.varchar
char
ynchar
tienen una longitud fija que reservará espacio de almacenamiento para la cantidad de caracteres que especifique, incluso si no utiliza todo ese espacio.varchar
ynvarchar
son de longitud variable que solo utilizarán espacios para los caracteres que almacene. No reservará almacenamiento comochar
onchar
.
nchar
y nvarchar
ocuparán el doble de espacio de almacenamiento, por lo que puede ser aconsejable utilizarlos sólo si necesita compatibilidad con Unicode .
Todas las respuestas hasta ahora indican que varchar
es de un solo byte o nvarchar
de doble byte. La primera parte de esto en realidad 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
Tenga en cuenta que los caracteres 华
y 国
todavía no estaban representados en la VARCHAR
versión y fueron reemplazados silenciosamente por ?
.
En realidad, todavía no hay caracteres chinos que puedan representarse con un solo byte en esa clasificación. Los únicos caracteres de un solo byte son el típico conjunto ASCII occidental.
Debido a esto, es posible que una inserción de una nvarchar(X)
columna a otra varchar(X)
falle 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 suplementario) que admiten archivos UTF-16
. En estas intercalaciones un solo nvarchar
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 almacena 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 ésta .
Sólo para agregar algo más: nchar : agrega espacios finales a los datos. nvarchar : no agrega espacios finales a los datos.
Por lo tanto, si va a filtrar su conjunto de datos por un campo 'nchar', es posible que desee utilizar RTRIM para eliminar los espacios. Por ejemplo, el campo nchar(10) llamado MARCA almacena la palabra NIKE. Agrega 6 espacios a la derecha de la palabra. Entonces, al filtrar, la expresión debería leer: RTRIM(Fields!BRAND.Value) = "NIKE"
¡Espero que esto ayude a alguien porque estuve luchando con eso por un momento!