Types de données SQL

22 Sep 2019 22 Sep 2019 15258 vues ESSADDOUKI Mostafa 7 min de lecture

Les types de données en SQL

Définition

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

TypeDescriptionPlage de valeurs
BITValeur binaire0 ou 1
TINYINTTrès petit entier0 à 255
SMALLINTPetit entier-32,768 à 32,767
INTEntier standard-2,147,483,648 à 2,147,483,647
BIGINTGrand 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
FLOATNombre à virgule flottante (précision approximative)Variable
DOUBLENombre à virgule flottante double précisionVariable

Types date et heure

TypeDescriptionFormat
DATEDate uniquementYYYY-MM-DD
TIMEHeure uniquementHH:MM:SS
DATETIMEDate et heure combinéesYYYY-MM-DD HH:MM:SS
TIMESTAMPHorodatage (secondes depuis l'époque Unix)YYYY-MM-DD HH:MM:SS
YEARAnnée (2 ou 4 chiffres)YYYY

Types chaînes de caractères

TypeDescriptionTaille maximale
CHAR(n)Chaîne de longueur fixe8 000 caractères
VARCHAR(n)Chaîne de longueur variable8 000 caractères
TEXTTexte de grande longueur2 Go

Types Unicode

TypeDescription
NCHAR(n)Caractères Unicode longueur fixe (4 000 max)
NVARCHAR(n)Caractères Unicode longueur variable (4 000 max)
NTEXTTexte Unicode long (1 Go max)

Types binaires

TypeDescription
BINARY(n)Données binaires longueur fixe
VARBINARY(n)Données binaires longueur variable
BLOBGrand objet binaire
CLOBGrand objet caractère

Autres types

TypeDescription
XMLDonnées au format XML
JSONDonnées au format JSON
ENUMListe de valeurs prédéfinies (MySQL)
SETEnsemble 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

TypeDescription
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
TINYTEXTTexte très court (max 255 caractères)
TEXT(size)Texte standard (max 255 caractères)
MEDIUMTEXTTexte moyen (max 16 777 215 caractères)
LONGTEXTTexte 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

TypeDescription
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
BOOLBooléen (0 = faux, non nul = vrai)

Types date/heure MySQL

TypeDescriptionPlage
DATEDate format YYYY-MM-DD1000-01-01 à 9999-12-31
DATETIMEDate et heure YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 à 9999-12-31 23:59:59
TIMESTAMPHorodatage Unix1970-01-01 00:00:01 à 2038-01-19 03:14:07 UTC
TIMEHeure HH:MM:SS-838:59:59 à 838:59:59
YEARAnné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 :

ClasseDescription
NULLValeur NULL
INTEGEREntier signé (1,2,3,4,6 ou 8 octets selon la taille)
REALNombre à virgule flottante (8 octets)
TEXTChaîne de caractères (encodage UTF-8, UTF-16BE, UTF-16LE)
BLOBDonné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
TEXTStocke les données comme TEXT si possible
NUMERICConvertit en INTEGER ou REAL si possible
INTEGERTente de convertir en INTEGER
REALTente de convertir en REAL
BLOBAucune 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

ConceptMySQLSQLite
TypageStatique (le type est fixé à la colonne)Dynamique (la valeur porte son type)
ChaînesCHAR(n), VARCHAR(n), TEXT, etc.TEXT uniquement
EntiersTINYINT, SMALLINT, INT, BIGINTINTEGER (taille variable)
DécimauxDECIMAL(p,s) précisPas de décimal précis (utiliser REAL ou stocker en entier)
DatesDATE, DATETIME, TIMESTAMPPas de types natifs (utilisation TEXT, INTEGER, REAL)
Auto-incrementAUTO_INCREMENTINTEGER PRIMARY KEY
BinairesBLOB, VARBINARY, etc.BLOB
 Exercice pratique

Choisir les bons types

 Niveau : Débutant

Pour chaque colonne, proposez le type de données approprié :

  1. Code postal (France) - 5 chiffres
  2. Prix d'un produit (en euros, avec 2 décimales)
  3. Date de naissance
  4. Description d'un article (texte long)
  5. Âge d'une personne

Donnez les types pour MySQL et pour SQLite.

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é.
SQL

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.