Comme dit julp, ta colonne doit accepter le null (il suffit pour cela de ne pas déclarer NOT NULL lors de sa création). Si tu veux qu'elle ne prenne qu'un bit, et que sa valur se comporte comme un booléen, tu la mets de type varchar(0) et tu entres soit une chaîne vide, soit null dans ta requête d'insertion.
l'enum sur deux valeurs fonctionne très bien, mais prend un octet (comme un tinyint ou un bool) plutôt que 1 bit.
Enum est plus sécuritaire puisque tu ne peux pas insérer d'autres valeurs que celles déclarées à la création. Alors que tu peux mettre 89 par exemple dans un (faux) booléen !
> Enum est plus sécuritaire puisque tu ne peux pas insérer d'autres valeurs que celles déclarées à la création. Alors que tu peux mettre 89 par exemple dans un (faux) booléen !
Mouais, bien que ce ne soit pas nécessairement un exemple, MySQL fonctionne comme PHP : toute valeur non nulle est une valeur vraie. Après : les contraintes CHECK ne sont pas implémentées si vraiment on voulait se restreindre aux valeurs 0/1 (sinon il faut passer par un trigger qui lève une erreur), encore qu'on n'en serait pas à aller dans cette voie si MySQL disposait d'un vrai type booléen. Bref, même si tu avais 89 comme valeur, si derrière au niveau de tes requêtes la colonne est utilisée comme un booléen, ça ne posera pas de problème (ie WHERE col - vrai pour 89 - et non WHERE col = 1 - faux pour 89 évidemment)
Et ENUM, je me méfierais tout de même :
il est possible d'indiquer la valeur d'un enum par la valeur elle-même comme son index
MySQL tente de convertir une valeur qui n'existe pas en index
Et dans le cas particulier où '0' et '1' seraient les valeurs de ladite ENUM, considérant ces deux points, on risque quelques surprises et confusions avec 0/1 en tant que littéral numérique.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli