Tipo de datos numérico
Los datos numéricos se dividen en exactos y aproximados, y en enteros y reales. En una categoría aparte se pueden incluir los valores de bits.
Números enteros exactos
Los números enteros se pueden declarar con la palabra clave UNSIGNED. En ese caso, a los elementos de esa columna no se les pueden asignar valores negativos, y el rango positivo que admite el tipo se duplica. Así, el tipo TINYINT admite valores de -128 a 127, mientras que TINYINT UNSIGNED admite de 0 a 255.
Números reales exactos
El tipo DECIMAL guarda el valor real exacto. Se usa cuando la precisión es crítica, por ejemplo, al guardar datos financieros.
Ejemplo de uso:
MySQL 8.4CREATE TABLE Users ( ... salary DECIMAL(5,2) );
En este ejemplo se declara que en la columna salary se guardarán números de 5 cifras como máximo, 2 de las cuales corresponden a la parte decimal. Es decir, esta columna admitirá valores entre -999,99 y 999,99.
La sintaxis DECIMAL equivale a DECIMAL(M) y DECIMAL(M,0). Por defecto, el parámetro M vale 10.
La parte entera y la parte decimal se guardan como 2 números enteros independientes. A partir de esto, es fácil calcular la memoria que ocupa. Así, en DECIMAL(5,2) la parte entera tiene 3 cifras y ocupa 2 bytes, y para las 2 cifras de la parte decimal basta con 1 byte. En total, se necesitan 3 bytes.
Valores de bits
El tipo de datos BIT(M) guarda una secuencia de bits de longitud fija. Por defecto, la longitud es de 8 bits. Si el valor asignado a una columna de este tipo usa menos de M bits, se rellena con ceros por la izquierda. Por ejemplo, si intentas guardar el valor b'101' en BIT(6), al final se guardará b'000101'.
Números aproximados
Los tipos de datos numéricos de coma flotante también pueden llevar el parámetro UNSIGNED. Igual que en los tipos enteros, este atributo impide guardar valores negativos en la columna marcada, pero, a diferencia de los tipos enteros, el intervalo máximo de valores de la columna no cambia.
Números enteros
Tipos autoincrementales
Los tipos SERIAL son pseudotipos para crear columnas autoincrementales. SERIAL equivale a INTEGER con una secuencia que se crea automáticamente.
Números reales exactos
El tipo NUMERIC guarda el valor real exacto. Se usa cuando la precisión es crítica, por ejemplo, al guardar datos financieros.
Ejemplo de uso:
MySQL 8.4CREATE TABLE Users ( ... salary NUMERIC(10,2) );
En este ejemplo se declara que en la columna salary se guardarán números de 10 cifras como máximo, 2 de las cuales corresponden a la parte decimal. Es decir, esta columna admitirá valores entre -99.999.999,99 y 99.999.999,99.
Números aproximados
Los tipos de coma flotante se usan para cálculos aproximados. PostgreSQL también admite los valores especiales Infinity, -Infinity y NaN (no es un número).