Types numériques
| Type | Usage |
|---|---|
| TINYINT … BIGINT | entiers ; TINYINT(1) sert de booléen |
| DECIMAL(p,s) | décimal exact — obligatoire pour la monnaie |
| FLOAT / DOUBLE | approché — mesures, jamais de l'argent |
| UNSIGNED | interdit le négatif, double la plage positive |
Argent = DECIMAL — le prix au litre du fioul se stocke en
DECIMAL(6,3) (ex. 1,082 €/L), jamais en FLOAT qui introduit des erreurs d'arrondi.Types chaînes
| Type | Usage |
|---|---|
| CHAR(n) | longueur fixe (codes, ex. code postal) |
| VARCHAR(n) | longueur variable — le choix courant |
| TEXT | textes longs |
| ENUM('a','b') | liste fermée (ex. statut de campagne) |
Encodage — utilisez
utf8mb4 (vrai UTF-8, accents et émojis) plutôt que l'ancien utf8 incomplet de MySQL.Dates, JSON, spatial
| Type | Contenu |
|---|---|
| DATE | AAAA-MM-JJ (ex. date_cloture) |
| DATETIME | date + heure, sans fuseau |
| TIMESTAMP | date + heure, converti selon le fuseau |
MySQL 8 gère aussi le JSON natif, les types spatiaux (POINT, utile pour géolocaliser une commune de campagne) et SET. À réserver aux besoins réels : un schéma bien normalisé reste souvent préférable au JSON fourre-tout.
🛢️ Sur le projet Fioul Groupé
Les types justes pour le domaine fioul : prix_litre DECIMAL(6,3), litres INT UNSIGNED, statut ENUM('OUVERTE','CLOTUREE','ANNULEE'), date_cloture DATE, et un POINT pour situer la commune sur la carte de l'appli.
À retenir
- Entiers dimensionnés ; DECIMAL pour la monnaie, jamais FLOAT.
- VARCHAR au quotidien, CHAR pour les codes, ENUM pour une liste fermée.
- utf8mb4 comme encodage ; DATE/DATETIME/TIMESTAMP pour le temps.
- JSON et spatial existent, mais préférez un schéma normalisé.