SQLite - Tipi di Dati
Ciao, futuri maghi dei database! Oggi ci immergeremo nel mondo affascinante dei tipi di dati di SQLite. Non preoccuparti se sei nuovo alla programmazione - sarò il tuo guida amichevole in questo viaggio, spiegando tutto passo per passo. Allora, prenditi una tazza di caffè (o tè, se è la tua cosa), e iniziamo!
Classi di Storage di SQLite
Prima di tutto, parliamo delle classi di storage di SQLite. Pensa a queste come i mattoni fondamentali dei dati in SQLite. Ci sono cinque classi di storage principali:
- NULL
- INTEGER
- REAL
- TEXT
- BLOB
Analizziamo queste con alcuni esempi:
NULL
CREATE TABLE example (
id INTEGER,
name TEXT,
age INTEGER
);
INSERT INTO example (id, name) VALUES (1, 'Alice');
In questo esempio, abbiamo creato una tabella e inserito una riga dove la colonna 'age' non è specificata. SQLite assegna automaticamente un valore NULL. NULL rappresenta l'assenza di dati - è come dire, "Non conosciamo l'età di Alice."
INTEGER
INSERT INTO example (id, name, age) VALUES (2, 'Bob', 30);
Qui, abbiamo inserito l'età di Bob come 30. SQLite memorizza questo come un INTEGER. Gli interi sono numeri interi senza decimali.
REAL
CREATE TABLE products (
id INTEGER,
name TEXT,
price REAL
);
INSERT INTO products (id, name, price) VALUES (1, 'Coffee', 3.99);
Il prezzo 3.99 è memorizzato come un REAL, che è il modo di SQLite per gestire i numeri a virgola mobile.
TEXT
INSERT INTO example (id, name, age) VALUES (3, 'Charlie', '25 years old');
Anche se stiamo memorizzando l'età, abbiamo usato TEXT qui. SQLite memorizzerà "25 years old" come una stringa di caratteri.
BLOB
BLOB sta per Binary Large Object. Viene utilizzato per memorizzare dati binari come immagini o file.
CREATE TABLE files (
id INTEGER,
name TEXT,
content BLOB
);
-- Inserire un BLOB di solito viene fatto nel codice dell'applicazione, non in SQL raw
Affinità di Tipo in SQLite
Ora, parliamo dell'affinità di tipo. È il modo di SQLite per essere flessibile con i tipi di dati. Immagina SQLite che fa del suo meglio per capire che tipo di dati vuoi memorizzare.
Ci sono cinque affinità di tipo in SQLite:
- TEXT
- NUMERIC
- INTEGER
- REAL
- BLOB
Ecco una tabella divertente per mostrarti come SQLite decide quale affinità utilizzare:
Se il tipo dichiarato contiene... | L'affinità è... |
---|---|
INT | INTEGER |
CHAR, CLOB, TEXT | TEXT |
BLOB | BLOB |
REAL, FLOA, DOUB | REAL |
Anything else | NUMERIC |
Vediamo questo in azione:
CREATE TABLE affinity_example (
a TEXT,
b NUMERIC,
c INTEGER,
d REAL,
e BLOB
);
INSERT INTO affinity_example VALUES
('123', '456', '789', '101112', x'ABCDEF');
SELECT typeof(a), typeof(b), typeof(c), typeof(d), typeof(e) FROM affinity_example;
Questo stamperà:
text, integer, integer, real, blob
Noterai come '456' è diventato un intero a causa dell'affinità NUMERIC!
Affinità e Nomi dei Tipi in SQLite
SQLite è molto flessibile quando si tratta di nomi dei tipi di colonna. Puoi usare i tipi SQL standard, e SQLite li mappolerà alle sue affinità. Ecco una guida rapida:
Nome del Tipo | Affinità |
---|---|
INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 | INTEGER |
CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOB | TEXT |
BLOB, no datatype specified | BLOB |
REAL, DOUBLE, DOUBLE PRECISION, FLOAT | REAL |
NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME | NUMERIC |
Tipo Booleano
SQLite non ha un tipo Booleano separato, ma non farti ingannare! Possiamo comunque lavorare con valori true/false. SQLite tratta 0 come false e 1 come true.
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
description TEXT,
completed BOOLEAN
);
INSERT INTO tasks (description, completed) VALUES
('Learn SQLite', 0),
('Master SQL', 1);
SELECT * FROM tasks WHERE completed = TRUE;
Questo restituirà il compito "Master SQL" perché il suo valore 'completed' è 1 (true).
Tipo Data e Ora
Ultimo ma non meno importante, parliamo delle date e delle ore. SQLite non ha un tipo di dati integrato per le date o le ore, ma fornisce diverse funzioni per lavorare con questi valori.
Di solito memorizziamo le date e le ore come TEXT, INTEGER o REAL:
CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date_text TEXT,
date_int INTEGER,
date_real REAL
);
INSERT INTO events (name, date_text, date_int, date_real) VALUES
('SQLite Workshop', '2023-06-15', 1686787200, 1686787200.0);
SELECT name,
date_text,
datetime(date_int, 'unixepoch') as date_from_int,
datetime(date_real, 'unixepoch') as date_from_real
FROM events;
Questo stamperà qualcosa come:
SQLite Workshop, 2023-06-15, 2023-06-15 00:00:00, 2023-06-15 00:00:00
Ecco tutto! Abbiamo coperto i principali tipi di dati in SQLite, dai classi di storage di base ai concetti più complessi dell'affinità di tipo. Ricorda, la flessibilità di SQLite è sia la sua forza che qualcosa di cui essere consapevoli. Testa sempre i tuoi dati per assicurarti che siano memorizzati e recuperati come ti aspetti.
La pratica rende perfetti, quindi non aver paura di sperimentare con questi concetti. Crea le tue tabelle, inserisci dati e osserva come SQLite gestisce diversi scenari. Prima di sapere, sarai un esperto di tipi di dati SQLite!
Buon coding, e possa i tuoi database essere sempre normalizzati!
Credits: Image by storyset