Compartir a través de


nchar y nvarchar (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)

Los tipos de datos de caracteres son de tamaño fijo, nchar, o de tamaño variable, nvarchar. En SQL Server 2012 (11.x) y versiones posteriores, cuando se usa una intercalación de caracteres complementarios (SC), estos tipos de datos almacenan el intervalo completo de datos de caracteres Unicode y usan la codificación de caracteres UTF-16 . Si se especifica una intercalación que no es de tipo SC, estos tipos de datos almacenan solo el subconjunto de datos de caracteres admitidos por la codificación de caracteres UCS-2.

Argumentos

nchar [ ( n ) ]

Datos de cadena de tamaño fijo. n define el tamaño de la cadena en pares de bytes y debe ser un valor entre 1 y 4.000. El tamaño de almacenamiento es dos veces n bytes. Para la codificación UCS-2, el tamaño de almacenamiento es el doble de n bytes y el número de caracteres que se pueden almacenar también en n. Para la codificación UTF-16, el tamaño de almacenamiento sigue siendo dos veces n bytes, pero el número de caracteres que se pueden almacenar podría ser menor que n, ya que los caracteres complementarios usan dos pares de bytes (también denominados pares suplentes). Los sinónimos ISO de nchar son national char y national character.

nvarchar [ ( n | max ) ]

Datos de cadena de tamaño variable. El valor de n define el tamaño de cadena en pares de bytes y puede ser de 1 a 4000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 caracteres (2 GB). El tamaño de almacenamiento es el doble de n bytes + 2 bytes. Para la codificación UCS-2, el tamaño de almacenamiento es el doble de n bytes + 2 bytes y el número de caracteres que se pueden almacenar también en n. Para la codificación UTF-16, el tamaño de almacenamiento sigue siendo dos veces n bytes + 2 bytes. Sin embargo, el número de caracteres que se pueden almacenar puede ser menor que n, ya que los caracteres complementarios usan dos pares de bytes (también denominados pares suplentes). Los sinónimos ISO de nvarchar son national char varying y national character varying.

Comentarios

Una idea equivocada habitual es pensar que, en nchar(n) y nvarchar(n), la n define el número de caracteres. Sin embargo, en nchar(n) y nvarchar(n), la n define la longitud de la cadena en pares de bytes (0 - 4.000). n nunca define números de caracteres que se pueden almacenar. Este concepto es similar a la definición de char y varchar.

La idea equivocada se produce porque cuando se usan caracteres definidos en el intervalo de 0 a 65.535 de Unicode, se puede almacenar un carácter por cada par de bytes. Sin embargo, en intervalos Unicode superiores (de 65 536 a 114 1111), un carácter podría usar dos pares de bytes. Por ejemplo, en una columna definida como nchar(10), el Motor de base de datos puede almacenar 10 caracteres que usan un par de bytes (intervalo de Unicode de 0 a 65.535), pero menos de 10 caracteres cuando se usan dos pares de bytes (intervalo de Unicode de 65.536 a 1.114.111). Para obtener más información sobre el almacenamiento Unicode y los intervalos de caracteres, vea Diferencias de almacenamiento entre UTF-8 y UTF-16.

Cuando no se especifica n en una instrucción de definición de datos o de declaración de variable, la longitud predeterminada es 1. Cuando no se especifica n con la función CAST, la longitud predeterminada es 30.

Si usa nchar o nvarchar, se recomienda que:

  • Utilice nchar cuando los tamaños de las entradas de datos de columna sean coherentes.
  • Use nvarchar cuando los tamaños de las entradas de datos de columna varíen considerablemente.
  • Utilice nvarchar(max) cuando los tamaños de las entradas de datos de columna varíen de forma considerable y la longitud de la cadena pueda superar los 4000 pares de bytes.

sysname es un tipo de datos definido por el usuario y suministrado por el sistema que es funcionalmente equivalente a nvarchar(128), excepto en que no acepta valores NULL. sysname se usa para hacer referencia a nombres de objetos de base de datos.

Los objetos que usan nchar o nvarchar se asignan a la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica por medio de la cláusula COLLATE.

SET ANSI_PADDING siempre es ON para nchar y nvarchar. SET ANSI_PADDING OFF no se aplica a los tipos de datos nchar o nvarchar.

Anteponga un prefijo de constantes de cadena de caracteres Unicode con la letra N para señalar una entrada UCS-2 o UTF-16, en función de si se utiliza una intercalación SC o no. Sin el N prefijo, la cadena se convierte en la página de códigos predeterminada de la base de datos que podría no reconocer determinados caracteres. En SQL Server 2019 (15.x) y versiones posteriores, cuando se usa una intercalación habilitada para UTF-8, la página de códigos predeterminada es capaz de almacenar el juego de caracteres UTF-8 unicode.

Cuando se prefija una constante de cadena con la letra N, la conversión implícita da como resultado una cadena UCS-2 o UTF-16 si la constante que se va a convertir no supera la longitud máxima del tipo de datos de cadena nvarchar (4000). De lo contrario, la conversión implícita da como resultado un valor grande nvarchar(max).

Advertencia

Cada columna varchar(max) o nvarchar(max) cuyo valor no sea NULL requiere 24 bytes de asignación fija adicional, que se descuentan del límite de 8060 bytes de las filas durante una operación de ordenación. Estos bytes adicionales pueden crear un límite implícito del número de columnas varchar(max) o nvarchar(max) cuyo valor no sea NULL en una tabla. No se produce ningún error especial cuando se crea la tabla (más allá de la advertencia habitual de que el tamaño máximo de la fila supera el máximo permitido de 8060 bytes) ni en el momento de la inserción de los datos. Este tamaño de fila grande puede provocar errores (como el error 512) que los usuarios podrían no prever durante algunas operaciones normales. Dos ejemplos de operaciones son las actualizaciones de la clave de índice agrupado o las ordenaciones del conjunto de columnas completo.

Conversión de datos de caracteres

Para obtener información sobre la conversión de datos de caracteres, vea char y varchar. Para obtener más información sobre la conversión entre tipos de datos, consulte CAST y CONVERT.