Cuando se requiere guardar una cadena de caracteres en SQL Server, es necesario utilizar alguno de los tipos de datos de texto. El determinar cuál es el mejor dependerá de los valores esperados (en cuanto a juego de caracteres y longitud). He aquí un recuento de los diferentes tipo
char (n)
Es el tipo de datos de texto en SQL Server (y en muchos motores de bases de datos relacionales) que permite guardar cadenas de caracteres, y siempre ocupará el mismo espacio, independientemente del contenido. Así, si se crea un campo de tipo char(100) -es decir de 100 caracteres- significa que ese campo siempre ocupará 100 Bytes y permitirá guardar cualquier caracter definido en el código ASCII. Si el campo está vacío, se guarda una cadena de 5 caracteres o de 100, el campo siempre ocupará el tamaño definido en su creación. Esto significa que para cadenas de caracteres cortas, hay espacio que se desperdicia.
Es útil cuando debemos guardar cadenas de caracteres de longitud pequeña (15 o 20 caracteres) o cuando son cadenas largas pero el rango en el tamaño lo tenemos muy bien detectado. Matrículas de auto, RFC o CURP (siempre de 13 y 18 caracteres respectivamente).
El tamaño máximo de un campo tipo char() es de 8,000 caracteres.
nchar (n)
Es muy similar al char(n), es decir, siempre son de longitud fija; aunque la diferencia radica en el tamaño que ocupan y los caracteres que se pueden guardar en ellos:
Si bien en los campos tipoe char(n) el número de caracteres es el número de bytes que ocupa, en un campo nchar(n) el tamaño es el doble, es decir, se ocupan dos bytes por cada caracter guardado. Esto es así debido a que estos campos pueden almacenar cualquier caracter UNICODE, por lo que si la base de datos requiere, por necesidades del negocio, almacenar caracteres japoneses, chinos o árabes,entonces se deberá optar por los campos nchar (n) por sobre los char(n).
Por todo lo demás, un campo nchar(n) es igual que uno char(n), ya que ambos son de longitud fija y guardan cadenas de caracteres.
El tamaño máximo de un campo tipo nchar() es de 4,000 caracteres (8,000 Bytes).
varchar(n)
Un campo de tipo varchar (n) permitirá guardar una cadena de caracteres (cada caracter ocupará un Byte) pero, a diferencia de un campo char(n), será de longitud variable. Cuando se crea un campo varchar(n) lo que se genera es un campo de longitud máxima n.
Este tipo de datos es especialmente útil para guardar cadenas de caracteres de longitud muy variable (un domicilio, nombre de empresa, nombre de persona, por citar algunos ejemplos) que tiene un rango de tamaño muy variable.
En principio este campo parecería que solo ofrece ventajas sobre un char(n), pero en la realidad el manejo de estos campos es ligeramente más complejo, ya que el motor de bases de datos tiene que «apartar» espacio dinámicamente dependiendo del tamaño de la cadena a almacenar, y en un campo char(n) este tamaño siempre es fijo.
El tamaño máximo de un campo tipo char() es de 231 caracteres (aproximadamente 2 GBytes). El tamaño exacto de es del número de caracteres más 2 Bytes.s
nvarchar(n)
Al igual que con nchar(n), la única diferencia entre un campo de tipo varchar(n) y un nvarchar(n) es que el primero guarda cualquier caracter del código ASCII, y el segundo puede guardar cualquier caracter UNICODE (ocupando, por tanto, el doble de espacio, ya que cada caracter UNICODE se almacena en 2 Bytes)
El tamaño máximo de un campo tipo nvarchar es de 2 GBytes, igual que un cmapo varchar, por lo que puede guardar la mitad de caracteres (por que ocupa el doble que un varchar).
text y ntext
Permite guardar cadenas de caracteres grandes. Un campo text puede ocupar 230 Bytes (un byte por caracter) y un ntext hasta 231 Bytes (2 caracteres por Byte). Estos campos son utilizados frecuentemente para descripciones, observaciones o notas que no requieren ser indizadas y solo se requiere almacenarlos.
Delimitador de valores de texto
Si se quiere utilizar una cadena de texto (una constante) en código SQL se tiene que delimitar por comillas simples en SQL Server. Ejemplos de cadenas de texto sería ‘abc’, ‘Laura’, ‘Av. México # 1500’, etc.