nchar e nvarchar (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Tipos de dados de caractere que sejam de tamanho fixo, nchar ou de tamanho variável, nvarchar. No SQL Server 2012 (11.x) e versões posteriores, quando uma ordenação habilitada para SC (Caractere Suplementar) é usada, esses tipos de dados armazenam toda a gama de dados de caracteres 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 codificação UTF-16, o tamanho do armazenamento ainda é duas vezes n bytes, mas o número de caracteres que podem ser armazenados pode ser menor que n, porque os caracteres suplementares usam dois pares de bytes (também chamados de pares substitutos). 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. O valor de n define o tamanho da cadeia de caracteres em pares de bytes e pode ser de 1 a 4.000. max indica que o tamanho de armazenamento máximo é de 2^31-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 codificação UTF-16, o tamanho do armazenamento ainda é duas vezes n bytes + 2 bytes. No entanto, o número de caracteres que podem ser armazenados pode ser menor que n, porque os caracteres suplementares usam dois pares de bytes (também chamados de pares substitutos). 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. Este conceito é semelhante à definição de char e varchar.

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 na página de código padrão do banco de dados que pode não reconhecer determinados caracteres. No SQL Server 2019 (15.x) e versões posteriores, quando uma ordenação habilitada para UTF-8 é usada, a página de código padrão é capaz de armazenar o conjunto de caracteres UTF-8 Unicode.

Quando você prefixa uma constante de cadeia de caracteres com a letra N, a conversão implícita resulta em uma cadeia de caracteres UCS-2 ou UTF-16 se a constante a ser convertida não exceder o comprimento 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 grande valor.

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 tamanho de linha grande pode causar erros (como o erro 512) que os usuários podem não prever 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 caracteres, consulte char e varchar. Para obter mais informações sobre a conversão entre tipos de dados, consulte CAST e CONVERT.