Diferencias entre Char, Varchar, NChar y NVarchar en SQL Server


¿Cuál es la diferencia entre estos, y cuán importante es la diferencia?

Char y NChar 

Cuando se configura un campo de tipo Char o NChar estamos indicando campos de tamaño fijo. Es Decir, si configuramos una tabla de la siguiente forma

Campo1 Char(10),
Campo2 NChar(10)
 
La diferencia entre Char y NChar es el soporte a carácteres Unicode (los carácteres Unicode ocupan más de 1 byte). Por este motivo a la hora de almacenar algún valor, en el Campo1 siempre ocupará 10 bytes y en el Campo2 20 Bytes.

Varchar y Nvarchar

VARCHAR es la abreviación de variable-length character string.   Es una cadena de caracteres de texto que puede ser tan grande como el tamaño de página para la tabla de la base de datos. Los campos de tipo Varchar o NVarchar son de almacenamiento variable

El tamaño almacenado dependerá del valor que se quiere guardar, el número de caracteres sólo configura el tamaño máximo que este campo puede almacenar. 

Configuramos una tabla de la siguiente forma:

CampoVariable1 Varchar(10),
CampoVariable2 NVarchar(10)

El tamaño almacenado dependerá del valor que se quiere guardar, el número de caracteres sólo configura el tamaño máximo que este campo puede almacenar. En el caso del CampoVariable1 el tamaño máximo será de 10 bytes, y en el caso del CampoVariable2 el tamaño máximo será de 20 bytes.

El tamaño de una página de tabla es 8.196 bytes, y no hay una fila de una tabla puede ser tener de 8.060 caracteres. Esto a su vez limita el tamaño máximo de un VARCHAR a 8000 caracateres

La "N" en NVARCHAR significa uNicode. Esencialmente, NVARCHAR no es más que un VARCHAR que soporta caracteres de dos bytes.  Lo que representara una longitud máxima de 4000 caracteres. Lo que significa tener la capacidad de almacenar caracteres especiales en este tipo de datos.
Y para que sirve Unicode? Si la columna donde almacenamos el texto es Unicode quiere decir que no tendremos problemas para guardar y recuperar caracteres que se usan en otros idiomas como el español (á é í ó ú ñ), pero con el español los problemas de visualización no son muy frecuentes, con el resto de idiomas es el problema (como el chino o japonés).

3
Unicode o No Unicode
Dependiendo de la información que queremos almacenar en nuestra base de datos, tendremos que definir si permitimos o no valores Unicode (Por ejemplo diferentes idiomas como el Ruso, Japonés, chino, …). Existen tablas de codificación de caracteres (Encodings) que poseen carácteres específicos de Doble Byte. Esto puede afectarnos a la hora de utilizar campos de tipo Char o Varchar, ya que un texto de 10 carácteres podría superar los 10 bytes, haciendo imposible la insercción del valor a la base de datos.


Espero que lo disfruten, compartan y comenten. ;)

"Si se puede imaginar... se puede programar."


2 comentarios:

  1. Hay un detalle que queria que alguien me confirmara. Los campos tipo char tienen longitud fija y se definen dentro de la tabla. Los campos varchar son de longitud variable y se almacenan en un extension dinamica de la tabla. Por lo tanto el tipo char se debe utilizar para campos de tipo alfanumericos como codigos y los campos varchar se usan para descripcion o nombres. Por ejemplo

    CODIGO_EMPLEADO CHAR(10)
    NOMBRE_EMPLEADO VARCHAR (30)

    Es una manera correcta de definir dos campos. Pero la siguiente definicion aunque no genera problemas de frente al usuario, puede pasar como una mala practica por ineficiente:

    CODIGO_EMPLEADO VARCHAR(10)
    NOMBRE_EMPLEADO VARCHAR(30)

    de la misma manera

    CODIGO_EMPLEADO CHAR(10)
    NOMBRE_EMPLEADO CHAR(30)

    Espero sus comentarios

    ResponderEliminar

Google