miércoles, 29 de octubre de 2014

Diferencia entre los tipos char de SQL Server

Cuando creamos una columna en una tabla y queremos que sea de tipo carater, SQL server nos ofrece varios tipos entre los que elegir, char, nchar, varchar y nvarchar. Veamos sus diferencias:
 

Char y NChar

Cuando se configura un campo de tipo Char o NChar indicamos 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 o caracteres especiales (los carácteres Unicode ocupan más de 1 byte). Si vamos a usar caracteres propios de nuestro idioma hay que usar NChar (acentos, la ñ, etc..). La diferencia fundamentar será la cantidad de espacio ocupda, mientras que el Campo1 siempre ocupará 10 bytes el Campo2  será de 20 Bytes.

Varchar y Nvarchar

Los campos de tipo Varchar o NVarchar permiten almacenamiento variable. 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. Para ello usamos VarChar(MAX) (Ojo  pues 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 y funciona como en el apartado anterior.


CampoVariable1 Varchar(10),
CampoVariable2 NVarchar(10)

 La diferencia fundamental entre char y varchar es que el tipo de datos char es que si en una columna char NOT NULL se inserta un valor más corto que la longitud de la columna, el valor se rellena a la derecha con espacios en blanco hasta completar el tamaño de la columna, mientras que en varchar no se rellenan con blancos mejorando el almacenamiento en la BD.
 
Por ejemplo, si una columna se define como char(10) y el dato que se va a almacenar es "música", SQL Server almacena este dato como "música____" donde "_" indica un espacio en blanco.
 
Esto es lo general pero depende de ANSI_PADDING.
  • Si ANSI_PADDING es ON al crear una columna char NULL, se comporta como una columna char NOT NULL: los valores se rellenan a la derecha hasta completar el tamaño de la columna.
  • Si ANSI_PADDING es OFF cuando se crea la columna char NULL, se comporta igual que una columna varchar con ANSI_PADDING establecido en OFF: los espacios en blanco a la derecha se truncan



 


 

No hay comentarios:

Publicar un comentario