SQLite - Types de Données

Bonjour, futurs magiciens des bases de données ! Aujourd'hui, nous plongeons dans le monde fascinant des types de données SQLite. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - je serai votre guide amical pour ce voyage, en expliquant tout étape par étape. Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et c'est parti !

SQLite - Data Type

Classes de Stockage SQLite

Commençons par les classes de stockage SQLite. Pensez à ces dernières comme les blocs de construction de base des données dans SQLite. Il y a cinq principales classes de stockage :

  1. NULL
  2. ENTIER (INTEGER)
  3. RÉEL (REAL)
  4. TEXTE (TEXT)
  5. BLOB

Reprenons-les avec quelques exemples :

NULL

CREATE TABLE exemple (
id ENTIER,
nom TEXTE,
age ENTIER
);

INSERT INTO exemple (id, nom) VALUES (1, 'Alice');

Dans cet exemple, nous avons créé une table et inséré une ligne où la colonne 'age' n'est pas spécifiée. SQLite lui assigne automatiquement une valeur NULL. NULL représente l'absence de données - c'est comme dire : "Nous ne savons pas l'âge d'Alice."

ENTIER (INTEGER)

INSERT INTO exemple (id, nom, age) VALUES (2, 'Bob', 30);

Ici, nous avons inséré l'âge de Bob comme 30. SQLite stocke cela comme un ENTIER. Les entiers sont des nombres entiers sans virgules décimales.

RÉEL (REAL)

CREATE TABLE produits (
id ENTIER,
nom TEXTE,
prix RÉEL
);

INSERT INTO produits (id, nom, prix) VALUES (1, 'Café', 3.99);

Le prix 3.99 est stocké comme une valeur RÉEL, qui est la manière de SQLite de gérer les nombres décimaux.

TEXTE (TEXT)

INSERT INTO exemple (id, nom, age) VALUES (3, 'Charlie', '25 ans');

Même si nous stockons l'âge, nous avons utilisé TEXTE ici. SQLite stockera "25 ans" comme une chaîne de caractères.

BLOB

BLOB signifie "Objet Binaires Large". Il est utilisé pour stocker des données binaires comme des images ou des fichiers.

CREATE TABLE fichiers (
id ENTIER,
nom TEXTE,
contenu BLOB
);

-- Insérer un BLOB se ferait généralement dans le code de l'application, pas en SQL brut

Affinité de Type SQLite

Passons maintenant à l'affinité de type. C'est la manière de SQLite d'être flexible avec les types de données. Imaginez SQLite essayant de comprendre au mieux le type de données que vous souhaitez stocker.

Il y a cinq affinités de type dans SQLite :

  1. TEXTE
  2. NUMÉRIQUE (NUMERIC)
  3. ENTIER (INTEGER)
  4. RÉEL (REAL)
  5. BLOB

Voici un tableau amusant pour vous montrer comment SQLite décide de l'affinité à utiliser :

Si le type déclaré contient... L'affinité est...
INT ENTIER
CHAR, CLOB, TEXT TEXTE
BLOB BLOB
REAL, FLOA, DOUB RÉEL
Autre chose NUMÉRIQUE

Voyons cela en action :

CREATE TABLE exemple_affinite (
a TEXTE,
b NUMÉRIQUE,
c ENTIER,
d RÉEL,
e BLOB
);

INSERT INTO exemple_affinite VALUES
('123', '456', '789', '101112', x'ABCDEF');

SELECT typeof(a), typeof(b), typeof(c), typeof(d), typeof(e) FROM exemple_affinite;

Cela donnera en sortie :

text, integer, integer, real, blob

Notez comment '456' est devenu un entier grâce à l'affinité NUMÉRIQUE !

Affinité et Noms de Type

SQLite est très flexible en ce qui concerne les noms de types de colonne. Vous pouvez utiliser les types standard SQL, et SQLite les mappera à ses affinités. Voici un guide rapide :

Nom du Type Affinité
INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 ENTIER
CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOB TEXTE
BLOB, aucun type spécifié BLOB
REAL, DOUBLE, DOUBLE PRECISION, FLOAT RÉEL
NUMÉRIQUE, DECIMAL(10,5), BOOLEAN, DATE, DATETIME NUMÉRIQUE

Type Boolean

SQLite n'a pas de type Boolean séparé, mais ne vous laissez pas tromper ! Nous pouvons toujours travailler avec des valeurs true/false. SQLite traite 0 comme false et 1 comme true.

CREATE TABLE tâches (
id ENTIER PRIMARY KEY,
description TEXTE,
terminée BOOLEAN
);

INSERT INTO tâches (description, terminée) VALUES
('Apprendre SQLite', 0),
('Maîtriser SQL', 1);

SELECT * FROM tâches WHERE terminée = TRUE;

Cela retournera la tâche "Maîtriser SQL" car sa valeur 'terminée' est 1 (true).

Type Date et Heure

Pour finir, parlons des dates et des heures. SQLite n'a pas de type de date ou d'heure intégré, mais il fournit plusieurs fonctions de date et d'heure pour travailler avec ces valeurs.

Nous stockons généralement les dates et heures comme TEXTE, ENTIER ou RÉEL :

CREATE TABLE événements (
id ENTIER PRIMARY KEY,
nom TEXTE,
date_text TEXTE,
date_int ENTIER,
date_real RÉEL
);

INSERT INTO événements (nom, date_text, date_int, date_real) VALUES
('Atelier SQLite', '2023-06-15', 1686787200, 1686787200.0);

SELECT nom,
date_text,
datetime(date_int, 'unixepoch') as date_from_int,
datetime(date_real, 'unixepoch') as date_from_real
FROM événements;

Cela sortie quelque chose comme :

Atelier SQLite, 2023-06-15, 2023-06-15 00:00:00, 2023-06-15 00:00:00

Et voilà ! Nous avons couvert les principaux types de données dans SQLite, des classes de stockage de base aux concepts plus nuancés de l'affinité de type. Souvenez-vous, la flexibilité de SQLite est à la fois sa force et quelque chose à garder à l'esprit. Toujours tester vos données pour vous assurer qu'elles sont stockées et récupérées comme vous le souhaitez.

La pratique rend parfait, alors n'ayez pas peur d'expérimenter avec ces concepts. Créez vos propres tables, insérez des données, et voyez comment SQLite gère différents scénarios. Avant de vous en rendre compte, vous serez un expert des types de données SQLite !

Bonne programmation, et puissent vos bases de données toujours être normalisées !

Credits: Image by storyset