En SQL, los tipos de datos se dividen en categorías principales para manejar diferentes tipos de información. A continuación, se presenta un resumen con ejemplos:
INT
, SMALLINT
, TINYINT
, BIGINT
.CREATE TABLE ejemplo_numeros (
id INT,
cantidad SMALLINT
);
En SQL, los tipos de datos INT, SMALLINT, TINYINT y BIGINT representan números enteros, pero varían en el rango de valores que pueden almacenar y en la cantidad de espacio que ocupan en la base de datos. Aquí están las principales diferencias entre ellos:
Tipo | Tamaño en bytes | Rango sin signo (UNSIGNED ) |
Rango con signo (SIGNED ) |
---|---|---|---|
TINYINT | 1 byte | 0 a 255 | -128 a 127 |
SMALLINT | 2 bytes | 0 a 65,535 | -32,768 a 32,767 |
INT | 4 bytes | 0 a 4,294,967,295 | -2,147,483,648 a 2,147,483,647 |
BIGINT | 8 bytes | 0 a 18,446,744,073,709,551,615 | -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 |
TINYINT:
SMALLINT:
INT:
BIGINT:
Supongamos que estás diseñando una tabla para gestionar un sistema de inventario. Podrías definir los campos como:
CREATE TABLE Inventario (
id INT AUTO_INCREMENT PRIMARY KEY, -- Identificador único
nombre VARCHAR(100) NOT NULL, -- Nombre del producto
stock SMALLINT NOT NULL, -- Cantidad en inventario
estado TINYINT NOT NULL, -- 0 = Inactivo, 1 = Activo
precio BIGINT NOT NULL -- Precio en centavos para evitar problemas de coma flotante
);
En este diseño:
DECIMAL(p, s)
, FLOAT
, REAL
.CREATE TABLE ejemplo_decimales (
precio DECIMAL(10, 2),
promedio FLOAT
);
En SQL, los tipos de datos DECIMAL(p, s), FLOAT, y REAL se utilizan para almacenar números con decimales, pero cada uno tiene diferentes características relacionadas con la precisión, el rango de valores, y el método de almacenamiento. Aquí están sus diferencias clave:
Descripción:
Parámetros:
p
: La precisión total (número máximo de dígitos significativos).s
: La escala (número de dígitos después del punto decimal).DECIMAL(10, 2)
permite un máximo de 10 dígitos, de los cuales 2 están después del punto decimal (como 99999999.99
).Rango:
p
. Puede almacenar números muy grandes o pequeños, siempre que se mantenga dentro de la precisión definida.Ventajas:
Desventajas:
Descripción:
Rango y Precisión:
Tamaño en memoria:
Ventajas:
Desventajas:
Descripción:
FLOAT(24)
).Rango y Precisión:
Ventajas:
Desventajas:
Característica | DECIMAL(p, s) | FLOAT | REAL |
---|---|---|---|
Precisión | Exacta | Aproximada | Aproximada |
Rango de valores | Limitado (definido por p ) |
Muy amplio | Amplio (pero menor que FLOAT) |
Errores de redondeo | No | Sí | Sí |
Consumo de memoria | Mayor (depende de p ) |
Menor | Menor (similar a FLOAT) |
Casos de uso | Finanzas, precios | Física, cálculos científicos | Aproximaciones rápidas |
CREATE TABLE Pagos (
id INT AUTO_INCREMENT PRIMARY KEY,
monto DECIMAL(10, 2) NOT NULL -- Almacena montos con exactitud (hasta 2 decimales)
);
CREATE TABLE Sensores (
id INT AUTO_INCREMENT PRIMARY KEY,
temperatura FLOAT NOT NULL -- Almacena mediciones de temperatura aproximadas
);
CREATE TABLE Estimaciones (
id INT AUTO_INCREMENT PRIMARY KEY,
aproximacion REAL NOT NULL -- Valores calculados aproximados
);
CHAR(n)
, VARCHAR(n)
.CREATE TABLE ejemplo_texto (
nombre VARCHAR(50),
codigo CHAR(10)
);
En SQL, CHAR(n) y VARCHAR(n) son tipos de datos usados para almacenar cadenas de texto, pero tienen diferencias clave en cómo manejan la longitud de las cadenas y el almacenamiento. Aquí se presentan sus principales diferencias:
Descripción:
n
.Características:
CHAR(10)
y almacenas el texto Hola
, ocupará 10 caracteres (rellenando con 6 espacios en blanco).Ventajas:
US
, MX
), códigos postales, o identificadores fijos.Desventajas:
Descripción:
Características:
VARCHAR(10)
y almacenas el texto Hola
, ocupará 4 caracteres más el espacio para guardar la longitud (dependiendo del sistema, generalmente 1 o 2 bytes adicionales).Ventajas:
Desventajas:
Característica | CHAR(n) | VARCHAR(n) |
---|---|---|
Longitud | Fija | Variable |
Uso de espacio | Siempre ocupa n caracteres |
Ocupa solo lo necesario + metadatos |
Eficiencia | Más rápido para longitudes fijas | Más eficiente en almacenamiento para cadenas cortas o variables |
Sobrecarga | Sin sobrecarga adicional | Usa 1-2 bytes adicionales para guardar la longitud |
Casos ideales | Códigos, identificadores fijos | Nombres, descripciones, comentarios |
CREATE TABLE Paises (
codigo CHAR(3) NOT NULL, -- Ejemplo: "USA", "MEX"
nombre VARCHAR(100) NOT NULL -- Este campo puede ser variable
);
codigo
es un identificador fijo de 3 caracteres, por lo que CHAR(3) es apropiado.CREATE TABLE Productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL, -- Ejemplo: "Laptop", "Teclado inalámbrico"
descripcion VARCHAR(255) -- Cadena de longitud variable
);
nombre
y descripcion
tienen longitudes variables, por lo que VARCHAR es más adecuado.TEXT
, CLOB
.CREATE TABLE ejemplo_texto_largo (
descripcion TEXT
);
En SQL, tanto TEXT como CLOB son tipos de datos utilizados para almacenar cadenas de texto de gran longitud. Sin embargo, sus diferencias residen en la terminología, implementación y capacidades, que varían según el sistema de gestión de bases de datos (DBMS). A continuación se explican sus diferencias:
Descripción:
Características:
LONGTEXT
).VARCHAR(n)
.Limitaciones:
TEXT
no pueden indexarse completamente para operaciones como búsquedas de coincidencias exactas (los índices se restringen a los primeros n caracteres).DEFAULT
).Casos de Uso:
Descripción:
CLOB
es parte del estándar SQL y está soportado por DBMS como Oracle, PostgreSQL (como TEXT
), SQL Server (como NVARCHAR(MAX)
), y otros.Características:
TEXT
en sistemas que lo soportan.Ventajas sobre TEXT:
Limitaciones:
TEXT
, puede ser más lento para búsquedas intensivas o cuando se necesita indexar el contenido completo.Casos de Uso:
Característica | TEXT | CLOB |
---|---|---|
Soporte | MySQL, PostgreSQL, otros | Oracle, SQL Server, PostgreSQL, otros |
Estándar SQL | No | Sí |
Tamaño máximo | Hasta 4 GB (LONGTEXT ) |
Hasta 2 GB o más (dependiendo del sistema) |
Indexación | Limitada | Limitada |
Manipulación como flujo | No | Sí (en algunos sistemas) |
Portabilidad | Menor | Mayor (más compatible entre DBMS) |
Casos de uso ideales | Texto grande sin requisitos de portabilidad | Texto extenso en aplicaciones portables |
CREATE TABLE Articulos (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
contenido TEXT -- Para almacenar artículos largos
);
CREATE TABLE Documentos (
id NUMBER PRIMARY KEY,
titulo VARCHAR2(255 CHAR),
contenido CLOB -- Texto extenso que puede incluir datos en Unicode
);
CREATE TABLE Publicaciones (
id INT PRIMARY KEY,
titulo NVARCHAR(255),
contenido NVARCHAR(MAX) -- Soporta texto largo con codificación Unicode
);
Uso de TEXT:
Uso de CLOB:
DATE
, TIME
, DATETIME
, TIMESTAMP
.CREATE TABLE ejemplo_fechas (
fecha DATE,
hora TIME,
fecha_hora DATETIME
);
Diferencia entre datetime
y timestamp
BINARY(n)
, VARBINARY(n)
, BLOB
.CREATE TABLE ejemplo_binarios (
archivo BLOB
);
Comparación entre BINARY, VARBINARY y BLOB
BOOLEAN
(en algunos sistemas como MySQL).CREATE TABLE ejemplo_booleano (
activo BOOLEAN
);
ENUM
.CREATE TABLE ejemplo_enum (
estado ENUM('activo', 'inactivo', 'pendiente')
);
JSON
(soportado en MySQL y PostgreSQL).CREATE TABLE ejemplo_json (
configuracion JSON
);
GEOMETRY
, POINT
.CREATE TABLE ejemplo_espacial (
ubicacion POINT
);
Estos son los principales tipos de datos en SQL, y su uso depende del tipo de información que deseas almacenar.