Las diferencias a la hora de escoger campos Varchar, NVarchar, Char o NChar. Es importante la diferencia existente para configurar la base de datos
de la forma más óptima. Ya que dependiendo del tipo de campo “String” que configuremos, la capacidad o la información puede variar.
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 o NVarchar
Los campos de tipo Varchar o NVarchar son de almacenamiento variable. Es decir, si 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 carácteres 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.
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.
Recomendación
Siempre que dudemos utilizar los campos Varchar y NVarchar, ya que al ser de almacenamiento de tipo variable, sólo ocupará lo que realmente necesitamos. Después habría que analizar si necesitamos almacenar carácteres Unicode o no, y que tabla de codificación vamos a utilizar. Si el Encoding es ASCII, no hace falta que sea Unicode el almacenamiento, pero en caso contrario, recomendaría NVarchar, por seguridad y evitar posibles futuros problemas.
Para más información consultar Char, Varchar y NChar, NVarchar