nchar e nvarchar (Transact-SQL)

Aplica-se a: SQL Server (todas as versões com suporte) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System)

Tipos de dados de caractere que sejam de tamanho fixo, nchar ou de tamanho variável, nvarchar. A partir do SQL Server 2012 (11.x), quando uma ordenação habilitada por Caractere Suplementar (SC) é usada, esses tipos de dados armazenam o intervalo completo de dados de caractere Unicode e usam a codificação de caracteres UTF-16 . Se uma ordenação não SC for especificada, então esses tipos de dados armazenarão somente o subconjunto de dados de caractere compatíveis com a codificação de caracteres UCS-2.

Argumentos

nchar [ ( n ) ]

Dados de cadeia de caracteres de tamanho fixo. n define o tamanho da cadeia de caracteres em pares-byte e deve ser um valor entre 1 a 4.000. O tamanho do armazenamento é duas vezes n bytes. Para a codificação UCS-2, o tamanho de armazenamento é duas vezes n bytes e a quantidade de caracteres que pode ser armazenada também é n. Para a codificação UTF-16, o tamanho de armazenamento ainda é duas vezes n bytes, mas a quantidade de caracteres que pode ser armazenada pode ser menor que n porque os Caracteres Suplementares usam dois pares-byte (também chamados de par alternativo). Os sinônimos ISO para nchar são char nacional e caractere nacional.

nvarchar [ ( n | máx ) ]

Dados de cadeia de caracteres de tamanho variável. n define o tamanho da cadeia de caracteres em pares-byte e pode ser um valor entre 1 a 4.000. max indica que o tamanho de armazenamento máximo é de 2^30-1 caracteres (2 GB). O tamanho do armazenamento é duas vezes n bytes + 2 bytes. Para a codificação UCS-2, o tamanho de armazenamento é duas vezes n bytes + 2 bytes e a quantidade de caracteres que pode ser armazenada também é n. Para a codificação UTF-16, o tamanho de armazenamento ainda é duas vezes n bytes + 2 bytes, mas a quantidade de caracteres que pode ser armazenada pode ser menor que n porque os Caracteres Suplementares usam dois pares-byte (também chamados de par alternativo). Os sinônimos ISO para nvarchar são national char varying e national character varying.

Comentários

Um equívoco comum é pensar que, com nchar(n) e nvarchar(n), o n define o número de caracteres. No entanto, em nchar(n) e nvarchar(n), o n define o tamanho da cadeia de caracteres em pares de bytes (0 a 4.000). n nunca define números de caracteres que podem ser armazenados. Isso é semelhante à definição de char(n) e varchar(n).

O equívoco ocorre porque, ao usar caracteres definidos no intervalo Unicode 0 a 65.535, um caractere pode ser armazenado por cada par de bytes. No entanto, em intervalos Unicode mais altos (65.536 a 1.114.111), um caractere pode usar dois pares de bytes. Por exemplo, em uma coluna definida como nchar(10), o Mecanismo de Banco de Dados pode armazenar 10 caracteres que usam um par-byte (intervalo Unicode de 0 a 65.535), mas menos de 10 caracteres ao usar dois pares-byte (o intervalo Unicode de 65.536 a 1.114.111). Para obter mais informações sobre o armazenamento e os intervalos de caracteres Unicode, confira Diferenças de armazenamento entre UTF-8 e UTF-16.

Quando n não é especificado em uma definição de dados ou instrução de declaração de variável, o tamanho padrão é 1. Quando n não é especificado com a função CAST, o tamanho padrão é 30.

Se você usar nchar ou nvarchar, recomendamos que:

  • Use nchar quando os tamanhos das entradas de dados de coluna forem consistentes.
  • Use nvarchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente.
  • Use nvarchar(max) quando os tamanhos das entradas de dados de coluna variarem consideravelmente e o tamanho da cadeia de caracteres puder exceder 4.000 pares-bytes.

sysname é um tipo de dados definido pelo usuário e fornecido pelo sistema que é funcionalmente equivalente a nvarchar(128), com exceção de que não permite valor nulo. sysname é usado para referenciar nomes de objetos de banco de dados.

Os objetos que usam nchar ou nvarchar recebem a ordenação padrão do banco de dados, a menos que uma ordenação específica seja atribuída com o uso da cláusula COLLATE.

SET ANSI_PADDING sempre é ON para nchar e nvarchar. SET ANSI_PADDING OFF não se aplica aos tipos de dados nchar ou nvarchar.

Prefixe uma constante de cadeia de caracteres Unicode com a letra NNpara sinalizar a entrada UCS-2 ou UTF-16, dependendo de se uma ordenação SC for ou não usada. Sem o prefixo N, a cadeia de caracteres é convertida para a página de código padrão do banco de dados, que talvez não reconheça determinados caracteres. A partir do SQL Server 2019 (15.x), quando uma ordenação habilitada por UTF-8 é usada, a página de código padrão é capaz de armazenar um conjunto de caracteres Unicode UTF-8.

Ao prefixar uma constante de cadeia de caracteres com a letra N, a conversão implícita resultará em uma cadeia de caracteres UCS-2 ou UTF-16, caso a constante a ser convertida não exceda o tamanho máximo para o tipo de dados de cadeia de caracteres nvarchar (4.000). Caso contrário, a conversão implícita resultará em um nvarchar(max) de valor grande.

Aviso

Cada coluna varchar(max) ou nvarchar(max) não nula requer 24 bytes de alocação fixa adicional, que conta para o limite de linhas de 8.060 bytes durante uma operação de classificação. Esses bytes adicionais podem criar um limite implícito para o número de colunas varchar(max) ou nvarchar(max) não nulas em uma tabela. Nenhum erro especial é fornecido quando a tabela é criada (além do aviso comum de que o tamanho máximo da linha excede o máximo permitido de 8.060 bytes) ou no momento da inserção de dados. Esse grande tamanho de linha pode causar erros (como o erro 512) imprevistos pelos usuários durante algumas operações normais. Dois exemplos de operações são uma atualização de chave de índice clusterizado ou classificações do conjunto de colunas completo.

Converter dados de caractere

Para obter informações sobre como converter dados de caractere, confira char e varchar (Transact-SQL).

Confira também