Diferencias en SQL Server de los tipos de datos char, nchar, varchar y nvarchar

Por: Sherlee Dizon | Actualizado: 2016-06-14 | Comentarios (4) | Relacionados: 1 | 2 | 3 | Más > Tipos de datos

Problema

Las diferencias de los tipos de datos char, nchar, varchar y nvarchar de SQL Server se discuten con frecuencia no sólo durante las entrevistas, sino también por los desarrolladores durante la discusiónsobre el diseño de la base de datos. En este consejo me gustaría compartir no sólo las diferencias básicas, sino también lo que necesitamos saber y tener en cuenta al utilizar cada tipo de datos.

Solución

Char, nchar, varchar y nvarchar se utilizan para almacenar datos de texto o cadenas en las bases de datos de SQL Server.

  • char – es el sinónimo SQL-92 de carácter. Los datos se rellenan con espacios en blanco/espacios para llenar el tamaño del campo. Tipo de datos de longitud fija.
  • nchar – es el sinónimo de SQL-92 para char nacional y carácter nacional.Tipo de datos de longitud fija.
  • varchar – es el sinónimo de SQL-92 para carácter variable. Tipo de datos de longitud variable.
  • nvarchar – es el sinónimo de SQL-92 para varying national char y varying nationalcharacter. Tipo de datos de longitud variable.

¿Qué significa N en SQL Server

Se preguntará qué significa la N? N significaNational Language Character Set y se utiliza para especificar una cadena Unicode. Cuando se utilizan tipos de datos Unicode, una columna puede almacenar cualquier carácter definido por el estándar Unicode, que incluye todos los caracteres definidos en los distintos conjuntos de caracteres. Tenga en cuenta que los tipos de datos Unicode ocupan el doble de espacio de almacenamiento que los tipos de datos que no son Unicode.

Unicode se utiliza normalmente en aplicaciones de bases de datos que están diseñadas para facilitar páginas de códigos que se extienden más allá de las páginas de códigos inglesas y de Europa Occidental. Esto significa que los tipos de datos de caracteres Unicode están limitados a la mitad del espacio, ya que cada byte requiere en realidad dos bytes para almacenar los datos (a veces se hace referencia a Unicode como «de doble ancho»). SQL Server ha soportado Unicode desde SQL Server7.0 proporcionando tipos de datos nchar/nvarchar/ntext. SQL Server no admite la codificaciónUTF-8 para los datos Unicode, pero sí admite la codificaciónUTF-16.

Hice una tabla a continuación que servirá de referencia rápida.

Diferencias de char, nchar, varchar y nvarchar en SQL Server

.Unicode

nchar varchar nvarchar
Tipo de datos de caracteres SinUnicode de longitud fija Unicode de longitud fija puede almacenar tanto caracteres no Unicode como Unicode(i.e. japonés, coreano, etc.) Longitud variable no Unicode Longitud variable Unicode puede almacenar tanto caracteres no Unicode como Unicode(i.e. japonés, coreano, etc.))
Longitud máxima hasta 8.000 caracteres hasta 4.000 caracteres hasta 8.000 caracteres hasta 4,000 caracteres
Tamaño de los caracteres ocupa 1 byte por carácter ocupa 2 bytes por carácter Unicode/No Unicode ocupa 1 byte por carácter ocupa 2 bytes por carácter Unicode/No Unicode
Tamaño de almacenamiento n bytes 2 veces n bytes Longitud real (en bytes) 2 veces la longitud real (en bytes)
Uso cuando la longitud de los datos es constante o columnas de longitud fija utilizar sólo si se necesita soporte Unicode como los caracteres japoneses Kanji o coreanosHangul debido a la sobrecarga de almacenamiento utilizar cuando la longitud de los datos es variable o columnas de longitud variable y si losactual datos es siempre mucho menos que la capacidad utilizar sólo si se necesita soporte Unicode como los caracteres japoneses Kanji o KoreanHangul debido a la sobrecarga de almacenamiento
la consulta que utiliza un parámetro varchar hace una búsqueda de índice debido a los conjuntos de colación de columnas consulta que utiliza un parámetro nvarchar hace una búsqueda de índice debido a los conjuntos de colación de columnas

Ventajas y desventajas de char, nchar, varchar y nvarchar en SQLServer

Tipos de datos Ventajas Desventajas
char El rendimiento de la consulta es mejor ya que no es necesario mover la columna durante la actualización.
No es necesario almacenar la longitud de la cadena en los dos últimos bytes.
Si no se utiliza correctamente, puede ocupar más espacio que varchar ya que es de longitud fija y no sabemos la longitud de la cadena a almacenar. No es bueno para la compresión ya que incrusta caracteres de espacio al final.
Varchar Al ser de longitud variable ocupa menos espacios de memoria. Disminuye el rendimiento de algunas consultas SQL.
nchar/nvarchar Soporta muchos ordenadores cliente que ejecutan diferentes localizaciones. Si no se utiliza correctamente puede utilizar mucho espacio de almacenamiento extra.

Con el crecimiento y la innovación de las aplicaciones web, es aún más importante soportar ordenadores cliente que ejecutan diferentes localizaciones. La forma más fácil de gestionar los datos de caracteres en las bases de datos internacionales es utilizar siempre los tipos de datos Unicodenchar, nvarchar y ntext, en lugar de sus equivalentes no Unicode, char, varchar y text.

Unicode es un estándar para asignar puntos de código a caracteres. Como está diseñado para cubrir todos los caracteres de todos los idiomas del mundo, no hay necesidad de diferentes páginas de código para manejar diferentes conjuntos de caracteres. SQL Server es compatible con el estándar Unicode, versión 3.2. Si todas las aplicaciones que trabajan con bases de datos internacionales utilizan también variables Unicode en lugar de variables no Unicode, no es necesario realizar traducciones de caracteres en ninguna parte del sistema. Los clientes verán los mismos caracteres en los datos que los demás clientes.

SQL Server almacena todos los datos textuales del catálogo del sistema en columnas con tipos de datos Unicode. Los nombres de los objetos de la base de datos, como tablas, vistas y procedimientos almacenados, se almacenan en columnas Unicode. Esto permite desarrollar aplicaciones utilizando sólo Unicode, y ayuda a evitar problemas con las conversiones de páginas de código.

Recuerde, cuando desarrolle nuevas aplicaciones, tener en cuenta si se utilizará globalmenteporque esto le ayudará a determinar si debe utilizar nchar y nvarchar para dar soporte a diferentes lenguajes.

Siguientes pasos

Aprenda más leyendo y explorando lo siguiente:

  • Tómese tiempo para leer también este consejo que podría ayudarle en la planificación de su diseño de base de datosDefinición de tipos de datos y tamaños
  • Aprenda más sobre la importancia de la consistencia de los tipos de datosConsistencia de los tipos de datos de SQL Server
  • Comparación de los tipos de datos de SQL Server y Oracle
  • Si tiene una aplicación que planea llevar a nivel global intente explorar con caracteresglobales. Quién sabe si tienes éxito podrías aumentar tus ventasy llevar tus aplicaciones al siguiente nivel.
    • Última actualización: 2016-06-14

      obtener scripts

      botón de siguiente consejo

      Acerca del autor
      La autora de MSSQLTips, Sherlee DizonSherlee Dizon es una consultora de TI y desarrolladora de aplicaciones web con más de 14 años de experiencia como desarrolladora de software y web.
      Ver todos mis consejos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *