04 - Tipos de datos en SQLite
Video
#SQL #SQLiteTable of Contents:
1 - Introducción a los Tipos de Datos de SQL Lite
Puedes revisar la documentación oficial aca:
Vamos a revisar las diferencias entre los sistemas de tipos de datos utilizados por SQLite y otros motores de bases de datos SQL, como Microsoft SQL Server o PostgreSQL.
1.1 - Comparación de Datos Estáticos vs. Dinámicos
-
Sistemas de Tipos de Datos Estáticos vs. Dinámicos: La mayoría de los motores de bases de datos SQL utilizan un sistema de tipos de datos estático y rígido. Esto significa que cada columna en una base de datos tiene un tipo de dato predefinido y fijo, como texto, número entero, número decimal, etc. En cambio, SQLite utiliza un sistema de tipos de datos más dinámico y flexible.
-
Flexibilidad de SQLite: En el sistema de SQLite, los tipos de datos están asociados con los valores en sí mismos, no con las columnas donde se almacenan. Esto permite que una misma columna pueda almacenar diferentes tipos de datos, lo que lo hace más flexible y fácil de usar, especialmente para los principiantes.
-
Comparación con Otros Motores de Bases de Datos: Mientras que en otros motores como Microsoft SQL Server o PostgreSQL existen muchos tipos de datos específicos (por ejemplo, diferentes tipos para texto corto y largo), SQLite simplifica este aspecto. Esta simplificación es especialmente útil para desarrolladores y administradores de bases de datos en etapas iniciales de aprendizaje.
-
Retrocompatibilidad de SQLite: A pesar de su flexibilidad, el sistema de tipos de datos de SQLite es retrocompatible con los sistemas más rígidos y estáticos de otros motores. Esto significa que puede manejar y trabajar con datos que provienen de sistemas con estructuras más estrictas sin problemas.
En resumen, podemos ver que SQLite, mediante su sistema de tipos de datos dinámico, ofrece una manera más sencilla y flexible de manejar los datos en comparación con otros motores de bases de datos que utilizan sistemas de tipos de datos más estáticos y rígidos.
1.2 - Clases de almacenamiento y tipos de datos
SQL utilliza las siguientes clases de almacenamiento:
-
NULL: Esta clase se utiliza para almacenar un valor nulo, es decir, un campo que no tiene ningún valor asignado. Es útil para representar la ausencia de datos en una columna específica.
-
INTEGER: Corresponde a un número entero con signo. SQLite puede almacenar este tipo de dato en 1, 2, 3, 4, 6, o 8 bytes, dependiendo de la magnitud del número. La cantidad de bytes utilizados se ajusta dinámicamente para ser lo más eficiente posible en términos de espacio.
-
REAL: Se refiere a un número de punto flotante, es decir, un número que puede tener fracciones decimales. SQLite almacena este tipo de datos como un número de punto flotante de 8 bytes según el estándar IEEE para representar este tipo de números.
-
TEXT: Esta clase se utiliza para almacenar cadenas de texto. La codificación de la base de datos puede ser UTF-8, UTF-16BE o UTF-16LE, y SQLite seleccionará la codificación adecuada automáticamente.
-
BLOB: El acrónimo BLOB viene de 'Binary Large Object', y se utiliza para almacenar datos binarios, es decir, información que no se ajusta a los tipos de datos convencionales como texto o números. Los datos almacenados como BLOB se guardan exactamente como se ingresan, sin ninguna conversión o tratamiento específico.
Estas clases de almacenamiento definen cómo SQLite maneja y almacena los diferentes tipos de datos, permitiendo un uso eficiente del espacio y la flexibilidad en el tipo de información que se puede guardar en la base de datos
1.3 - Tipos de Afinidad
En SQLite, un tipo de afinidad se refiere a las reglas que determinan cómo la base de datos trata los datos ingresados en una columna en función del tipo de dato declarado para dicha columna. La afinidad de tipo no es el tipo de dato real de la columna, sino más bien una sugerencia sobre cómo SQLite debe manejar los datos insertados en la tabla. Cuando se insertan datos en una columna, SQLite aplica estas reglas de afinidad para convertir los datos al tipo que considera más apropiado, si es necesario.
Hay cinco afinidades de tipo en SQLite:
- TEXT
- NUMERIC
- INTEGER
- REAL
- BLOB
La afinidad se determina por el tipo de dato que se declara en la definición de la columna. Por ejemplo, si defines una columna con el tipo VARCHAR
, SQLite aplicará la afinidad de tipo TEXT
a esa columna. Si defines una columna como INT
, SQLite aplicará la afinidad INTEGER
.
SQLite utiliza estas afinidades para realizar conversiones automáticas de tipos. Por ejemplo, si intentas insertar un valor de texto en una columna con afinidad INTEGER
, SQLite intentará convertir ese texto en un número entero. Si no puede, el valor se almacenará como texto. Esto permite que SQLite sea flexible con los tipos de datos, pero también puede causar confusión si no se entienden bien las reglas de afinidad.
NUMERIC
En SQLite, el tipo de afinidad NUMERIC
es un tipo de dato flexible que puede almacenar diferentes clases de valores numéricos. A diferencia de los otros tipos de datos, como INTEGER
, REAL
, TEXT
, y BLOB
, que tienden a ser más específicos en cuanto al tipo de dato que almacenan, NUMERIC
es más versátil. Aquí tienes una explicación más detallada:
- NUMERIC: Este tipo de afinidad es bastante único porque SQLite trata de adivinar el tipo de dato numérico basándose en la entrada. Por ejemplo, si ingresas un número sin una fracción decimal, SQLite lo manejará como un
INTEGER
. Si el número tiene una fracción decimal o contiene la letra "E" (indicando notación científica), entonces se tratará comoREAL
. Además, SQLite también puede almacenar valoresNUMERIC
como texto si la entrada parece ser más adecuada para almacenamiento de texto (por ejemplo, si introduces un número con ceros iniciales). Esta afinidad es particularmente útil cuando los datos numéricos que se van a almacenar pueden ser de diferentes tipos y no se quiere perder precisión, como puede ser el caso de números de identificación, precios que pueden o no tener decimales, etc.
En resumen, la afinidad NUMERIC
puede considerarse como un tipo de dato "camaleónico" que adapta su comportamiento al valor concreto que se está almacenando, lo cual es diferente de los otros tipos de datos que tienen un comportamiento fijo e inmutable independientemente del valor específico que almacenan.
En la siguiente tabla podemos ver como SQLite aplica las reglas del tipo de afinidad para determinar el tipo de dato a utilizar.
Z) Glossary
File | Definition |
---|