sqlserver - Qual é a diferença entre char, nchar, varchar e nvarchar no SQL Server?
varchar max size sql server 2014 (8)
O que se entende por nvarchar
?
Qual é a diferença entre char
, nchar
, varchar
e nvarchar
no SQL Server?
Apenas para adicionar algo mais: nchar - adiciona espaços finais aos dados. nvarchar - não adiciona espaços à direita dos dados.
Portanto, se você for filtrar seu conjunto de dados por um campo 'nchar', convém usar o RTRIM para remover os espaços. Por exemplo, o campo nchar (10) chamado BRAND armazena a palavra NIKE. Acrescenta 6 espaços à direita da palavra. Portanto, ao filtrar, a expressão deve ser: RTRIM (Fields! BRAND.Value) = "NIKE"
Espero que isso ajude alguém lá fora porque eu estava lutando com isso um pouco agora!
Apenas para esclarecer ... ou resumir ...
-
nchar
envarchar
podem armazenar caracteres Unicode . -
char
evarchar
não podem armazenar caracteres Unicode . -
char
enchar
são de tamanho fixo, o que reservará espaço de armazenamento para o número de caracteres que você especificar, mesmo que você não use todo esse espaço. -
varchar
envarchar
são de tamanho variável, que usam apenas espaços para os caracteres que você armazena. Não reserva armazenamento comochar
ounchar
.
nchar
e nvarchar
nchar
o dobro do espaço de armazenamento, portanto, é aconselhável usá-los apenas se você precisar de suporte a Unicode .
O nchar e o char funcionam praticamente da mesma maneira que os outros, assim como o nvarchar e o varchar. A única diferença entre eles é que os caracteres Unicode de armazenamento nchar / nvarchar (essenciais se você precisar do uso de conjuntos de caracteres estendidos) enquanto varchar não.
Como os caracteres Unicode exigem mais armazenamento, os campos nchar / nvarchar ocupam o dobro do espaço (por exemplo, em versões anteriores do SQL Server, o tamanho máximo de um campo nvarchar é 4000).
Esta questão é uma duplicata desta .
Todas as respostas até agora indicam que varchar
é único byte, nvarchar
é double byte. A primeira parte disso realmente depende do agrupamento, conforme ilustrado abaixo.
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
Retorna
Note que os caracteres 华
e were ainda não foram representados na versão VARCHAR
e foram silenciosamente substituídos por ?
.
Na verdade, ainda não há caracteres chineses que possam ser representados por um único byte nesse agrupamento. Os únicos caracteres de byte único são o típico conjunto ASCII ocidental.
Devido a isso, é possível que uma inserção de uma coluna nvarchar(X)
em uma coluna varchar(X)
falhe com um erro de truncamento (em que X denota um número que é o mesmo em ambas as instâncias).
O SQL Server 2012 adiciona agrupamentos SC (Supplementary Character) que suportam UTF-16
. Nesses agrupamentos, um único caractere nvarchar
pode levar 2 ou 4 bytes.
nchar requer mais espaço que nvarchar.
por exemplo,
Um char (100) sempre armazenará 100 caracteres, mesmo se você digitar apenas 5, os 95 caracteres restantes serão preenchidos com espaços. Armazenar 5 caracteres em um varchar (100) economizará 5 caracteres.
msdn.microsoft.com/en-us/library/ms186939.aspx são:
- n [var] char armazena unicode, enquanto [var] char apenas armazena caracteres de byte único.
- [n] char requer um número fixo de caracteres do comprimento exato enquanto [n] varchar aceita um número variável de caracteres até e incluindo o comprimento definido.
Outra diferença é o comprimento. Tanto nchar quanto nvarchar podem ter até 4.000 caracteres. E char e varchar podem ter até 8000 caracteres. Mas, para o SQL Server, você também pode usar um [n] varchar (max) que pode manipular até 2.147.483.648 caracteres. (Dois gigabytes, um inteiro de 4 bytes assinado.)
NVARCHAR pode armazenar caracteres Unicode e leva 2 bytes por caractere.
-
char
: dados de caracteres de comprimento fixo com um comprimento máximo de 8000 caracteres. -
nchar
: dados unicode de tamanho fixo com um comprimento máximo de 4000 caracteres. -
Char
= comprimento de 8 bits -
NChar
= comprimento de 16 bits