SQLite
 sql >> Base de données >  >> RDS >> SQLite

Types de données SQLite

Résumé  :dans ce didacticiel, vous découvrirez le système de types de données SQLite et ses concepts associés, tels que les classes de stockage, le typage de manifeste et l'affinité de type.

Introduction aux types de données SQLite

Si vous venez d'autres systèmes de base de données tels que MySQL et PostgreSQL, vous remarquez qu'ils utilisent le typage statique . Cela signifie que lorsque vous déclarez une colonne avec un type de données spécifique, cette colonne ne peut stocker que des données du type de données déclaré.

Différent des autres systèmes de bases de données, SQLite utilise le système de type dynamique . En d'autres termes, une valeur stockée dans une colonne détermine son type de données, et non le type de données de la colonne.

De plus, vous n'avez pas besoin de déclarer un type de données spécifique pour une colonne lorsque vous créez une table. Dans le cas où vous déclarez une colonne avec le type de données entier, vous pouvez stocker tout type de types de données tels que texte et BLOB, SQLite ne s'en plaindra pas.

SQLite fournit cinq types de données primitifs appelés classes de stockage .

Les classes de stockage décrivent les formats utilisés par SQLite pour stocker les données sur le disque. Une classe de stockage est plus générale qu'un type de données, par exemple, INTEGER la classe de stockage comprend 6 types différents d'entiers. Dans la plupart des cas, vous pouvez utiliser les classes de stockage et les types de données de manière interchangeable.

Le tableau suivant illustre 5 classes de stockage dans SQLite :

Classe de stockage Signification
NULL Les valeurs NULL signifient des informations manquantes ou inconnues.
ENTIER Les valeurs entières sont des nombres entiers (positifs ou négatifs). Un entier peut avoir des tailles variables telles que 1, 2, 3, 4 ou 8 octets.
RÉEL Les valeurs réelles sont des nombres réels avec des valeurs décimales qui utilisent des flottants de 8 octets.
TEXTE TEXT est utilisé pour stocker des données de caractères. La longueur maximale de TEXT est illimitée. SQLite prend en charge divers encodages de caractères.
BLOB BLOB représente un grand objet binaire qui peut stocker n'importe quel type de données. La taille maximale de BLOB est, théoriquement, illimitée.

SQLite détermine le type de données d'une valeur en fonction de son type de données selon les règles suivantes :

  • Si un littéral n'a pas de guillemets ni de point décimal ni d'exposant, SQLite attribue la classe de stockage INTEGER.
  • Si un littéral est entouré de guillemets simples ou doubles, SQLite attribue la classe de stockage TEXT.
  • Si un littéral n'a ni guillemet, ni point décimal, ni exposant, SQLite attribue la classe de stockage REAL.
  • Si un littéral est NULL sans guillemets, il a attribué la classe de stockage NULL.
  • Si un littéral a X'ABCD' ou x 'abcd', SQLite a attribué la classe de stockage BLOB.

SQLite ne prend pas en charge les classes de stockage de date et d'heure intégrées. Cependant, vous pouvez utiliser TEXT, INT ou REAL pour stocker les valeurs de date et d'heure. Pour des informations détaillées sur la façon de gérer les valeurs de date et d'heure, consultez le didacticiel de date et d'heure SQLite.

SQLites fournit le typeof() fonction qui permet de vérifier la classe de stockage d'une valeur en fonction de son format. Voir l'exemple suivant :

SELECT
	typeof(100),
	typeof(10.0),
	typeof('100'),
	typeof(x'1000'),
	typeof(NULL);Code language: SQL (Structured Query Language) (sql)

Une seule colonne dans SQLite peut stocker des types de données mixtes. Voir l'exemple suivant.

Tout d'abord, créez une nouvelle table nommée test_datatypes pour les tests.

CREATE TABLE test_datatypes (
	id INTEGER PRIMARY KEY,
	val
);Code language: SQL (Structured Query Language) (sql)

Deuxièmement, insérez des données dans le test_datatypes tableau.

INSERT INTO test_datatypes (val)
VALUES
	(1),
	(2),
	(10.1),
	(20.5),
	('A'),
	('B'),
	(NULL),
	(x'0010'),
	(x'0011');Code language: SQL (Structured Query Language) (sql)

Troisièmement, utilisez le typeof() fonction pour obtenir le type de données de chaque valeur stockée dans le val colonne.

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes;Code language: SQL (Structured Query Language) (sql)

Vous pouvez demander comment SQLite trie les données dans une colonne avec différentes classes de stockage comme la colonne val ci-dessus.

Pour résoudre ce problème, SQLite fournit l'ensemble de règles suivant en matière de tri :

  • La classe de stockage NULL a la valeur la plus basse. Elle est inférieure à toutes les autres valeurs. Entre les valeurs NULL, il n'y a pas d'ordre.
  • Les classes de stockage immédiatement supérieures sont INTEGER et REAL. SQLite compare numériquement INTEGER et REAL.
  • La classe de stockage immédiatement supérieure est TEXT. SQLite utilise le classement des valeurs TEXT lorsqu'il compare les valeurs TEXT.
  • La classe de stockage la plus élevée est le BLOB. SQLite utilise la fonction C memcmp() pour comparer les valeurs BLOB.

Lorsque vous utilisez le ORDER BY clause pour trier les données dans une colonne avec différentes classes de stockage, SQLite effectue les étapes suivantes :

  • Tout d'abord, regroupez les valeurs en fonction de la classe de stockage :NULL, INTEGER et REAL, TEXT et BLOB.
  • Ensuite, triez les valeurs dans chaque groupe.

L'instruction suivante trie les données mixtes dans le val colonne des test_datatypes tableau :

SELECT
	id,
	val,
	typeof(val)
FROM
	test_datatypes
ORDER BY val;Code language: SQL (Structured Query Language) (sql)

Typage du manifeste SQLite et affinité de type

D'autres concepts importants liés aux types de données SQLite sont le typage manifeste et l'affinité de type :

  • Le typage manifeste signifie qu'un type de données est une propriété d'une valeur stockée dans une colonne, et non la propriété de la colonne dans laquelle la valeur est stockée. SQLite utilise le typage du manifeste pour stocker des valeurs de n'importe quel type dans une colonne.
  • L'affinité de type d'une colonne est le type recommandé pour les données stockées dans cette colonne. Notez que le type de données est recommandé, pas obligatoire, par conséquent, une colonne peut stocker n'importe quel type de données.

Dans ce didacticiel, vous avez découvert les types de données SQLite et certains concepts importants, notamment les classes de stockage, le typage de manifeste et l'affinité de type.