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
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
Acerca del autor
Ver todos mis consejos