Les types de données sont utilisés pour représenter la nature des données pouvant être stockées dans la base de données. Le type de données est l'ensemble des valeurs représentables. Il est également connu comme l'attribut qui spécifie un type de données de l'objet.
Chaque colonne, variable et expression a un type de données associé dans le code SQL lors de la création de la table.
Points importants sur les types de données SQL
Les fournisseurs de bases de données relationnelles ne prennent pas en charge tous les types de données. Par exemple, Oracle ne prend pas en charge DATETIME et MySQL ne prend pas en charge CLOB. Vérifiez toujours la compatibilité.
Les types de données listés ici n'incluent pas tous les types existants. Certains fournisseurs ont leurs propres types spécifiques (ex: money sous SQL Server).
Chaque fournisseur a sa taille maximale pour les différents types. L'important est de savoir quel type utiliser dans un scénario spécifique.
Classification générale des types SQL
Les types de données SQL sont principalement classés en six catégories :
Types de données de chaînes (CHAR, VARCHAR, TEXT, etc.)
Types de données numériques (INT, DECIMAL, FLOAT, etc.)
Date et heure (DATE, TIME, DATETIME, TIMESTAMP)
Types de données binaires (BINARY, VARBINARY, BLOB)
Types de données Unicode (NCHAR, NVARCHAR, NTEXT)
Autres types (XML, JSON, CLOB, etc.)
Types de données standard (génériques)
Types numériques
Type
Description
Plage de valeurs
BIT
Valeur binaire
0 ou 1
TINYINT
Très petit entier
0 à 255
SMALLINT
Petit entier
-32,768 à 32,767
INT
Entier standard
-2,147,483,648 à 2,147,483,647
BIGINT
Grand entier
-9,223,372,036,854,775,808 à 9,223,372,036,854,775,807
DECIMAL(p,s)
Nombre décimal précis (p = total chiffres, s = chiffres après virgule)
Variable selon p et s
FLOAT
Nombre à virgule flottante (précision approximative)
Variable
DOUBLE
Nombre à virgule flottante double précision
Variable
Types date et heure
Type
Description
Format
DATE
Date uniquement
YYYY-MM-DD
TIME
Heure uniquement
HH:MM:SS
DATETIME
Date et heure combinées
YYYY-MM-DD HH:MM:SS
TIMESTAMP
Horodatage (secondes depuis l'époque Unix)
YYYY-MM-DD HH:MM:SS
YEAR
Année (2 ou 4 chiffres)
YYYY
Types chaînes de caractères
Type
Description
Taille maximale
CHAR(n)
Chaîne de longueur fixe
8 000 caractères
VARCHAR(n)
Chaîne de longueur variable
8 000 caractères
TEXT
Texte de grande longueur
2 Go
Types Unicode
Type
Description
NCHAR(n)
Caractères Unicode longueur fixe (4 000 max)
NVARCHAR(n)
Caractères Unicode longueur variable (4 000 max)
NTEXT
Texte Unicode long (1 Go max)
Types binaires
Type
Description
BINARY(n)
Données binaires longueur fixe
VARBINARY(n)
Données binaires longueur variable
BLOB
Grand objet binaire
CLOB
Grand objet caractère
Autres types
Type
Description
XML
Données au format XML
JSON
Données au format JSON
ENUM
Liste de valeurs prédéfinies (MySQL)
SET
Ensemble de valeurs (MySQL)
Focus sur MySQL
Spécificités MySQL
MySQL propose des variantes spécifiques des types standard, avec des tailles et des comportements particuliers.
Types de chaînes MySQL
Type
Description
VARCHAR(size)
Chaîne variable, taille max 0-65535 caractères
CHAR(size)
Chaîne fixe, taille max 255, défaut 1
VARBINARY(size)
Chaîne d'octets binaires variable
BINARY(size)
Chaîne d'octets binaires fixe
TINYTEXT
Texte très court (max 255 caractères)
TEXT(size)
Texte standard (max 255 caractères)
MEDIUMTEXT
Texte moyen (max 16 777 215 caractères)
LONGTEXT
Texte long (max 4 294 967 295 caractères)
ENUM(val1,val2,...)
Une valeur choisie dans une liste (max 65 535 valeurs)
SET(val1,val2,...)
Zéro ou plusieurs valeurs choisies dans une liste (max 64 valeurs)
BLOB(size)
Objet binaire (max 65 535 octets)
Types numériques MySQL
Type
Description
BIT(size)
Type bit, size de 1 à 64, défaut 1
INT(size)
Entier standard, size = largeur d'affichage max 255
FLOAT(size,d)
Nombre flottant, size total chiffres, d chiffres après virgule
DOUBLE(size,d)
Double précision
DECIMAL(size,d)
Décimal précis, size max 65, d max 30
BOOL
Booléen (0 = faux, non nul = vrai)
Types date/heure MySQL
Type
Description
Plage
DATE
Date format YYYY-MM-DD
1000-01-01 à 9999-12-31
DATETIME
Date et heure YYYY-MM-DD HH:MM:SS
1000-01-01 00:00:00 à 9999-12-31 23:59:59
TIMESTAMP
Horodatage Unix
1970-01-01 00:00:01 à 2038-01-19 03:14:07 UTC
TIME
Heure HH:MM:SS
-838:59:59 à 838:59:59
YEAR
Année (4 chiffres)
1901 à 2155
Focus sur SQLite
Particularité de SQLite
SQLite utilise un système de types très différent des autres SGBDR. Il pratique le dynamic typing : le type est associé à la valeur elle-même, pas à la colonne.
Classes de stockage (Storage Classes)
SQLite ne possède que 5 classes de stockage :
Classe
Description
NULL
Valeur NULL
INTEGER
Entier signé (1,2,3,4,6 ou 8 octets selon la taille)
REAL
Nombre à virgule flottante (8 octets)
TEXT
Chaîne de caractères (encodage UTF-8, UTF-16BE, UTF-16LE)
BLOB
Données binaires brutes
Type Affinity
SQLite utilise le concept de type affinity : une colonne peut avoir une affinité de type, mais peut stocker n'importe quelle classe de stockage.
Affinité
Comportement
TEXT
Stocke les données comme TEXT si possible
NUMERIC
Convertit en INTEGER ou REAL si possible
INTEGER
Tente de convertir en INTEGER
REAL
Tente de convertir en REAL
BLOB
Aucune conversion (stockage brut)
Exemples de déclaration en SQLite
Exemple n°1
CREATE TABLE Employes(
Id INTEGER PRIMARY KEY, -- Affinité INTEGER
Nom TEXT NOT NULL, -- Affinité TEXT
Age INTEGER, -- Affinité INTEGER
Salaire REAL, -- Affinité REAL
Photo BLOB -- Affinité BLOB
);
Points clés SQLite
Pas de différence entre CHAR, VARCHAR et TEXT (tout est TEXT)
Pas de types DATE/TIME natifs (on utilise TEXT, INTEGER ou REAL)
INTEGER PRIMARY KEY devient auto-increment
Les types sont indicatifs, on peut stocker un texte dans une colonne INTEGER
Maximum de 64 bits pour les entiers, pas de DECIMAL précis
Comparaison MySQL vs SQLite
Concept
MySQL
SQLite
Typage
Statique (le type est fixé à la colonne)
Dynamique (la valeur porte son type)
Chaînes
CHAR(n), VARCHAR(n), TEXT, etc.
TEXT uniquement
Entiers
TINYINT, SMALLINT, INT, BIGINT
INTEGER (taille variable)
Décimaux
DECIMAL(p,s) précis
Pas de décimal précis (utiliser REAL ou stocker en entier)
Dates
DATE, DATETIME, TIMESTAMP
Pas de types natifs (utilisation TEXT, INTEGER, REAL)
Auto-increment
AUTO_INCREMENT
INTEGER PRIMARY KEY
Binaires
BLOB, VARBINARY, etc.
BLOB
Exercice pratique
Choisir les bons types
Niveau : Débutant
Pour chaque colonne, proposez le type de données approprié :
Code postal (France) - 5 chiffres
Prix d'un produit (en euros, avec 2 décimales)
Date de naissance
Description d'un article (texte long)
Âge d'une personne
Donnez les types pour MySQL et pour SQLite.
Solution
Donnée
MySQL
SQLite
Code postal
CHAR(5) (longueur fixe)
TEXT
Prix
DECIMAL(10,2)
REAL (ou entier en centimes)
Date naissance
DATE
TEXT (format ISO)
Description
TEXT ou LONGTEXT
TEXT
Âge
TINYINT (0-255) ou INT
INTEGER
Points clés à retenir
Les types de données définissent la nature des valeurs stockées.
MySQL propose une grande variété de types (INT, VARCHAR, DATE, DECIMAL, etc.).
SQLite utilise un système dynamique avec 5 classes de stockage (NULL, INTEGER, REAL, TEXT, BLOB).
SQLite n'a pas de types DATE/TIME natifs : on utilise TEXT (ISO) ou INTEGER (timestamp).
SQLite n'a pas de DECIMAL précis : utiliser REAL ou stocker en entier (centimes).
En SQLite, INTEGER PRIMARY KEY est auto-increment.
Choisir le type le plus adapté : plus précis possible pour économiser l'espace.
Toujours vérifier la compatibilité des types avec le SGBDR utilisé.
Ce site utilise des cookies pour améliorer votre expérience, analyser notre trafic et diffuser des publicités personnalisées.
En cliquant sur
Tout accepter, vous consentez à notre utilisation des cookies.
Consultez nos
cookies,
confidentialité
et
conditions d'utilisation.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.