SQL Data Types: Distintos tipos de datos en SQL

El tipo de datos o data types de SQL de una columna, define qué valor puede contener la columna: entero, carácter, monetario, fecha y hora, binario, etc...

Cada columna de una tabla de base de datos debe tener un nombre y un tipo de datos.

Un desarrollador de SQL debe decidir qué tipo de datos se almacenarán dentro de cada columna al crear una tabla. El tipo de datos es una guía para que SQL comprenda qué tipo de datos se espera dentro de cada columna y también identifica como interactuará SQL con los datos almacenados.

Advertencia: Los tipos de datos pueden tener diferentes nombres en diferentes bases de datos. ¡E incluso si el nombre es el mismo, el tamaño y otros detalles pueden ser diferentes! ¡Revise siempre la documentación!


String Data Types o Tipos de Datos String:

Data TypeDescripciónTamaño Max.Almacenamiento
char(n)Cadena de caracteres de ancho fijo8,000 caracteresAncho definido
varchar(n)Caracteres string de ancho variable8,000 caracteres2 bytes + número de caracteres
varchar(max)Caracteres string de ancho variable1,073,741,824 caracteres2 bytes + número de caracteres
textCaracteres string de ancho variable2GB de datos de texto4 bytes + número de caracteres
ncharString Unicode de ancho fijo4,000 caracteresAncho definido x 2
nvarcharString Unicode de ancho variable4,000 caracteres
nvarchar(max)String Unicode de ancho variable536,870,912 caracteres
ntextString Unicode de ancho variable2GB de datos de texto
binary(n)String binario de ancho fijo8,000 bytes
varbinaryString binario de ancho variable8,000 bytes
varbinary(max)String binario de ancho variable2GB
imageString binario de ancho variable2GB

Numeric Data Types o Tipos de Datos Numéricos

Tipos de datosDescripciónAlmacenamiento
bitNúmero entero que puede ser 0, 1 o NULL
tinyintPermite números enteros del 0 al 2551 byte
smallintPermite números enteros entre -32.768 y 32.7672 bytes
intPermite números enteros entre -2,147,483,648 y 2,147,483,6474 bytes
bigintPermite números enteros entre -9,223,372,036,854,775,808 y 9,223,372,036,854,775,8078 bytes
decimal(p,s)Precisión fija y números de escala.
Permite números desde -10^38 +1 hasta 10^38 –1.
El parámetro p indica el número total máximo de dígitos que se pueden almacenar (tanto a la izquierda como a la derecha del punto decimal). p debe ser un valor de 1 a 38. El valor predeterminado es 18.
El parámetro s indica el número máximo de dígitos almacenados a la derecha del punto decimal. s debe ser un valor de 0 a p. El valor predeterminado es 0
5-17 bytes
numeric(p,s)Precisión fija y números de escala.
Permite números desde -10^38 +1 hasta 10^38 –1.
El parámetro p indica el número total máximo de dígitos que se pueden almacenar (tanto a la izquierda como a la derecha del punto decimal). p debe ser un valor de 1 a 38. El valor predeterminado es 18.
El parámetro s indica el número máximo de dígitos almacenados a la derecha del punto decimal. s debe ser un valor de 0 a p. El valor predeterminado es 0
5-17 bytes
smallmoneyDatos monetarios de -214.748,3648 a 214.748,36474 bytes
moneyDatos monetarios desde -922.337.203.685.477.5808 hasta 922.337.203.685.477.58078 bytes
float(n)Datos numéricos de precisión flotante de -1.79E + 308 a 1.79E + 308.
El parámetro n indica si el campo debe contener 4 u 8 bytes. float(24) contiene un campo de 4 bytes y float(53) contiene un campo de 8 bytes. El valor predeterminado de n es 53.
4 or 8 bytes
realDatos numéricos de precisión flotante de -3,40E + 38 a 3,40E + 384 bytes

Tipos de Datos de Fecha y Hora

Tipo de datosDescripciónAlmacenamiento
datetimeDel 1 de enero de 1753 al 31 de diciembre de 9999 con una precisión de 3,33 milisegundos8 bytes
datetime2Del 1 de enero de 0001 al 31 de diciembre de 9999 con una precisión de 100 nanosegundos6-8 bytes
smalldatetimeDel 1 de enero de 1900 al 6 de junio de 2079 con una precisión de 1 minuto4 bytes
dateGuarde una fecha solamente. Del 1 de enero de 0001 al 31 de diciembre de 99993 bytes
timeAlmacena un tiempo solo con una precisión de 100 nanosegundos3-5 bytes
datetimeoffsetLo mismo que datetime2 con la adición de un desplazamiento de zona horaria8-10 bytes
timestampAlmacena un número único que se actualiza cada vez que se crea o modifica una fila. El valor de la marca de tiempo se basa en un reloj interno y no corresponde al tiempo real. Cada tabla puede tener solo una variable de marca de tiempo

Otros tipos de datos

Tipo de datosDescripción
sql_variantAlmacena hasta 8000 bytes de datos de varios tipos de datos, excepto text, ntext y timestamp
uniqueidentifierAlmacena un identificador único global (GUID)
xmlAlmacena datos con formato XML. Máximo 2GB
cursorAlmacena una referencia a un cursor utilizado para operaciones de base de datos.
tableAlmacena un conjunto de resultados para su posterior procesamiento.