¿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.
"Si se puede imaginar... se puede programar."
Muchas Gracias
ResponderEliminarHay 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
ResponderEliminarCODIGO_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