nchar e nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Tipos de dados de caractere que sejam de tamanho fixo, nchar ou de tamanho variável, nvarchar.Character data types that are either fixed-size, nchar, or variable-size, nvarchar. A partir do SQL Server 2012 (11.x)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 .Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), when a Supplementary Character (SC) enabled collation is used, these data types store the full range of Unicode character data and use the UTF-16 character encoding. 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.If a non-SC collation is specified, then these data types store only the subset of character data supported by the UCS-2 character encoding.

ArgumentosArguments

nchar [ ( n ) ]nchar [ ( n ) ]
Dados de cadeia de caracteres de tamanho fixo.Fixed-size string data. n define o tamanho da cadeia de caracteres em pares-byte e deve ser um valor entre 1 a 4.000.n defines the string size in byte-pairs and must be a value from 1 through 4,000. O tamanho do armazenamento é duas vezes n bytes.The storage size is two times 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.For UCS-2 encoding, the storage size is two times n bytes and the number of characters that can be stored is also 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).For UTF-16 encoding, the storage size is still two times n bytes but the number of characters that can be stored may be smaller than n because Supplementary Characters use two byte-pairs (also called surrogate-pair). Os sinônimos ISO para nchar são char nacional e caractere nacional.The ISO synonyms for nchar are national char and national character.

nvarchar [ ( n | max ) ]nvarchar [ ( n | max ) ]
Dados de cadeia de caracteres de tamanho variável.Variable-size string data. n define o tamanho da cadeia de caracteres em pares-byte e pode ser um valor entre 1 a 4.000.n defines the string size in byte-pairs and can be a value from 1 through 4,000. max indica que o tamanho de armazenamento máximo é de 2^30-1 caracteres (2 GB).max indicates that the maximum storage size is 2^30-1 characters (2 GB). O tamanho do armazenamento é duas vezes n bytes + 2 bytes.The storage size is two times 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.For UCS-2 encoding, the storage size is two times n bytes + 2 bytes and the number of characters that can be stored is also 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).For UTF-16 encoding, the storage size is still two times n bytes + 2 bytes but the number of characters that can be stored may be smaller than n because Supplementary Characters use two byte-pairs (also called surrogate-pair). Os sinônimos ISO para nvarchar são national char varying e national character varying.The ISO synonyms for nvarchar are national char varying and national character varying.

RemarksRemarks

Um equívoco comum é considerar que em NCHAR(n) e NVARCHAR(n), n define o número de caracteres.A common misconception is to think that NCHAR(n) and NVARCHAR(n), the n defines the number of characters. Mas em NCHAR(n) e NVARCHAR(n), o n define o comprimento da cadeia de caracteres em pares-byte (0 a 4.000).But in NCHAR(n) and NVARCHAR(n) the n defines the string length in byte-pairs (0-4,000). n nunca define números de caracteres que podem ser armazenados.n never defines numbers of characters that can be stored. Isso é semelhante à definição de CHAR(n) e VARCHAR(n).This is similar to the definition of CHAR(n) and VARCHAR(n).
O equívoco ocorre porque, ao usar caracteres definidos no intervalo Unicode 0 – 65.535, um caractere pode ser armazenado por cada par-byte.The misconception happens because when using characters defined in the Unicode range 0-65,535, one character can be stored per each byte-pair. No entanto, em intervalos Unicode mais altos (65.536 – 1.114.111), um caractere pode usar dois pares-byte.However, in higher Unicode ranges (65,536-1,114,111) one character may use two byte-pairs. Por exemplo, em uma coluna definida como NCHAR(10), o Mecanismo de Banco de DadosDatabase Engine pode armazenar 10 caracteres que usam um par-byte (intervalo Unicode 0 – 65.535), mas menos de 10 caracteres ao usar dois pares-byte (o intervalo Unicode 65.536 – 1.114.111).For example, in a column defined as NCHAR(10), the Mecanismo de Banco de DadosDatabase Engine can store 10 characters that use one byte-pair (Unicode range 0-65,535), but less than 10 characters when using two byte-pairs (Unicode range 65,536-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.For more information about Unicode storage and character ranges, see Storage differences between UTF-8 and 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.When n is not specified in a data definition or variable declaration statement, the default length is 1. Quando n não é especificado com a função CAST, o tamanho padrão é 30.When n is not specified with the CAST function, the default length is 30.

Se você usar nchar ou nvarchar, recomendamos que:If you use nchar or nvarchar, we recommend to:

  • Use nchar quando os tamanhos das entradas de dados de coluna forem consistentes.Use nchar when the sizes of the column data entries are consistent.
  • Use nvarchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente.Use nvarchar when the sizes of the column data entries vary considerably.
  • 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.Use nvarchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 4,000 byte-pairs.

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 is a system-supplied user-defined data type that is functionally equivalent to nvarchar(128), except that it is not nullable. sysname é usado para referenciar nomes de objetos de banco de dados.sysname is used to reference database object names.

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.Objects that use nchar or nvarchar are assigned the default collation of the database unless a specific collation is assigned using the COLLATE clause.

SET ANSI_PADDING é sempre ON para nchar e nvarchar.SET ANSI_PADDING is always ON for nchar and nvarchar. SET ANSI_PADDING OFF não se aplica aos tipos de dados nchar ou nvarchar.SET ANSI_PADDING OFF does not apply to the nchar or nvarchar data types.

Prefixe uma constante de cadeia de caracteres Unicode com a letra N para sinalizar a entrada UCS-2 ou UTF-16, dependendo de se uma ordenação SC for ou não usada.Prefix a Unicode character string constants with the letter N to signal UCS-2 or UTF-16 input, depending on whether an SC collation is used or not. 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.Without the N prefix, the string is converted to the default code page of the database that may not recognize certain characters. A partir do SQL Server 2019 (15.x)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.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), when a UTF-8 enabled collation is used, the default code page is capable of storing UNICODE UTF-8 character set.

Observação

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).When prefixing a string constant with the letter N, the implicit conversion will result in a UCS-2 or UTF-16 string if the constant to convert does not exceed the max length for the nvarchar string data type (4,000). Caso contrário, a conversão implícita resultará em um nvarchar de valor grande (max).Otherwise, the implicit conversion will result in a large-value nvarchar(max).

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.Each non-null varchar(max) or nvarchar(max) column requires 24 bytes of additional fixed allocation, which counts against the 8,060-byte row limit during a sort operation. 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.These additional bytes can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns in a table. 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.No special error is provided when the table is created (beyond the usual warning that the maximum row size exceeds the allowed maximum of 8,060 bytes) or at the time of data insertion. Esse grande tamanho de linha pode causar erros (como o erro 512) imprevistos pelos usuários durante algumas operações normais.This large row size can cause errors (such as error 512) that users may not anticipate during some normal operations. Dois exemplos de operações são uma atualização de chave de índice clusterizado ou classificações do conjunto de colunas completo.Two examples of operations are a clustered index key update, or sorts of the full column set.

Convertendo dados characterConverting Character Data

Para obter informações sobre como converter dados de caractere, consulte char e varchar (Transact-SQL).For information about converting character data, see char and varchar (Transact-SQL).

Confira tambémSee also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CAST e CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
Tipos de dados (Transact-SQL)Data Types (Transact-SQL)
DECLARE @local_variable (Transact-SQL)DECLARE @local_variable (Transact-SQL)
LIKE (Transact-SQL)LIKE (Transact-SQL)
SET ANSI_PADDING (Transact-SQL)SET ANSI_PADDING (Transact-SQL)
SET @local_variable (Transact-SQL) SET @local_variable (Transact-SQL)
Suporte a ordenações e a Unicode Collation and Unicode Support
Conjuntos de caracteres multibyte e de byte únicoSingle-Byte and Multibyte Character Sets