Type de données BOOLEAN de MySQL expliqué : TINYINT(1), VRAI/FAUX et bonnes pratiques

1. Introduction

MySQL est un SGBDR open‑source qui est devenu le choix principal pour la gestion de bases de données pour de nombreux développeurs. Parmi ses types de données, le type BOOLEAN est largement utilisé pour représenter les valeurs vrai/faux dans les bases de données. Cependant, MySQL gère le type BOOLEAN différemment des autres systèmes de bases de données, il faut donc faire attention. Dans cet article, nous expliquerons tout, de l’utilisation de base du BOOLEAN de MySQL à ses limites et aux alternatives possibles.

2. Bases du type BOOLEAN

2.1 Définition du BOOLEAN et comment MySQL le met en œuvre

Dans MySQL, le type BOOLEAN n’existe pas réellement en tant que type distinct. À la place, MySQL utilise TINYINT(1). BOOLEAN est un alias de TINYINT(1), et en interne MySQL considère 0 comme FALSE et 1 comme TRUE. À cause de cela, une colonne définie comme BOOLEAN peut en fait stocker des valeurs entières de 0 à 255, et MySQL reconnaît 0 et 1 comme valeurs booléennes.

2.2 Pourquoi MySQL utilise TINYINT(1)

MySQL utilise TINYINT(1) au lieu d’un type BOOLEAN dédié afin de préserver les performances globales du système et la compatibilité. Le type TINYINT est un entier d’un octet, ce qui permet une utilisation efficace du stockage et de la mémoire dans la base de données. De plus, comme le TINYINT peut être manipulé de façon cohérente avec les autres types numériques de MySQL, cela aide à maintenir la cohérence à l’échelle du système.

2.3 Mappage entre 0 et 1

Dans MySQL, le type BOOLEAN utilise en interne 0 et 1 pour représenter FALSE et TRUE. Cela ressemble à la façon dont de nombreux langages de programmation gèrent les valeurs logiques, et cela vous permet d’utiliser 0 et 1 au lieu de TRUE et FALSE lorsque vous travaillez avec la base de données. Cependant, vous devez être conscient que des valeurs entières arbitraires peuvent également être insérées.

3. Exemples d’utilisation du type BOOLEAN

3.1 Comment définir une colonne BOOLEAN dans une table

Pour définir une table en utilisant le type BOOLEAN, spécifiez le type de colonne comme BOOLEAN ou TINYINT(1). Voici un exemple qui définit la colonne is_active comme BOOLEAN.

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active BOOLEAN
);

Dans cet exemple, la colonne is_active est définie comme BOOLEAN, mais en interne elle est gérée comme TINYINT(1).

3.2 Exemple d’insertion de données (en utilisant TRUE et FALSE)

Lors de l’insertion de données dans une colonne BOOLEAN, vous pouvez utiliser les mots‑clés TRUE et FALSE. MySQL mappe ces mots‑clés respectivement à 1 et 0.

INSERT INTO example_table (is_active) VALUES (TRUE);
INSERT INTO example_table (is_active) VALUES (FALSE);

3.3 Exemples de requêtes utilisant BOOLEAN dans une instruction SELECT

Dans une instruction SELECT, vous pouvez utiliser une colonne BOOLEAN comme condition. Vous devez l’utiliser avec précaution en comprenant la différence entre l’opérateur = et l’opérateur IS.

-- Using the = operator
SELECT * FROM example_table WHERE is_active = TRUE;

-- Using the IS operator
SELECT * FROM example_table WHERE is_active IS TRUE;

Si vous utilisez l’opérateur =, seuls 1 et 0 sont reconnus comme TRUE et FALSE. En revanche, si vous utilisez l’opérateur IS, des valeurs entières autres que 1 peuvent également être reconnues comme TRUE, il faut donc faire attention.

4. Limitations et notes importantes concernant le type BOOLEAN

4.1 Contraintes dues au fait que BOOLEAN est un alias de TINYINT(1)

Puisque BOOLEAN est en réalité un alias de TINYINT(1), il peut stocker n’importe quelle valeur entière de 0 à 255. En d’autres termes, des valeurs autres que 1 ou 0 peuvent être insérées dans une colonne BOOLEAN. Pour maintenir l’intégrité des données, vous devez appliquer une validation appropriée lors de l’insertion des données.

4.2 Gestion des valeurs NULL et utilisation de NOT NULL

Par défaut, une colonne BOOLEAN de MySQL accepte les valeurs NULL. Si vous ne souhaitez pas autoriser les valeurs NULL, vous devez spécifier explicitement NOT NULL lors de la définition de la colonne.

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active BOOLEAN NOT NULL
);

Dans cet exemple, les valeurs NULL ne peuvent pas être insérées dans la colonne is_active.

4.3 Différences avec le SQL standard

MySQL gère le type BOOLEAN différemment des autres systèmes de bases de données et du SQL standard. Dans de nombreux autres systèmes, BOOLEAN est explicitement pris en charge et ne peut généralement contenir que les valeurs TRUE et FALSE. Cependant, dans MySQL, BOOLEAN est émulé à l’aide de TINYINT(1), il faut donc être prudent lors de la migration vers une autre base de données.

5. Alternatives au type BOOLEAN

5.1 Vérification de type plus stricte avec ENUM

Si vous souhaitez une vérification de type plus stricte que celle offerte par BOOLEAN, l’utilisation du type ENUM est une option possible. Avec ENUM, vous pouvez restreindre les valeurs autorisées dans une colonne à un ensemble spécifique.

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active ENUM('FALSE', 'TRUE') NOT NULL
);

Avec cette approche, la colonne is_active ne peut stocker que « TRUE » ou « FALSE », aucune autre valeur n’est permise.

5.2 Exemple pratique d’utilisation d’ENUM à la place de BOOLEAN

En utilisant ENUM, vous pouvez gérer les valeurs vrai/faux tout en conservant une meilleure intégrité des données qu’avec une colonne BOOLEAN. Cependant, comme ENUM stocke les données sous forme de chaînes, il peut être moins efficace en termes d’espace que BOOLEAN (TINYINT(1)). Pour cette raison, il est important de choisir le type le plus approprié en fonction des exigences de votre application.

6. Cas d’utilisation et bonnes pratiques pour BOOLEAN

6.1 Quand BOOLEAN est le bon choix

Le type BOOLEAN (ou TINYINT(1)) est utile pour gérer des drapeaux et des commutateurs. Par exemple, il convient pour stocker des informations binaires (TRUE/FALSE) telles que l’état d’activité d’un utilisateur ou la disponibilité d’un produit en stock.

6.2 Utilisation d’index sur les colonnes BOOLEAN

Créer un index sur une colonne BOOLEAN peut améliorer les performances des requêtes. Cependant, l’efficacité de l’indexation d’une colonne BOOLEAN dépend de la cardinalité de l’index (la diversité des valeurs). Par exemple, si la plupart des enregistrements ont la valeur TRUE, l’index pourra offrir un bénéfice limité.

6.3 Bonnes pratiques pour maintenir l’intégrité des données

Lorsque vous utilisez le type BOOLEAN, considérez les bonnes pratiques suivantes pour préserver l’intégrité des données.

  • Si vous ne souhaitez pas autoriser les valeurs NULL dans la colonne, spécifiez NOT NULL.
  • Appliquez une validation appropriée lors de l’insertion de données pour empêcher l’insertion de valeurs autres que 0 et 1.
  • Envisagez d’utiliser ENUM pour une vérification de type plus stricte.

7. Résumé

Comprendre et utiliser correctement le type BOOLEAN dans MySQL est extrêmement important pour la conception de bases de données et le développement d’applications. Puisque BOOLEAN est émulé en tant que TINYINT(1), il faut être vigilant car des valeurs entières arbitraires peuvent être insérées. Si une vérification de type plus stricte est requise, il est également judicieux d’envisager l’utilisation d’ENUM.