2010-10-14 26 views
24

Il semble que je devrais utiliser tinyint(); mais je ne sais pas comment l'appliquer?Comment ajouter un champ booléen à MySQL?

La question est quelle est votre recommandation si je dois avoir un champ booléen dans DB MySQL et modifier la valeur avec PHP d'une manière

+0

Un champ booléen peut aussi être interprété comme 1 et 0 si avoir un champ tinyint se traduira par une base de données plus rapide. Et si vous l'indexez encore plus vite. Toutes ces réponses ci-dessous sont hors de valeur pour vous! @Felix @Matthew @Haim bon travail –

+0

@etbal Oui en effet, tous très utile! – Trufa

Répondre

43

Oui, TINYINT(1) est le chemin à parcourir ... vous pouvez également utiliser BOOL or BOOLEAN qui sont synonymes (donc ça ne fait pas une différence).

0 est évaluée à false en PHP et 1 à true (en fait, tout autre numéro que 0 est évaluée à true, mais 1 est normalement utilisé).

+1

Merci Très utile, déjà mis en œuvre! – Trufa

+0

@Felix Kling aucun autre nombre que 0 évalue à vrai http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html –

+0

@Viswanathan: En fait, je parlais de PHP dans ce cas, pas MySQL. –

2

Vous avez raison que la solution générale est tinyint(1). Vous pouvez utiliser BOOL pour faire court:

CREATE TABLE example (
     flag BOOL 
     ); 
2

vous avez l'option de tinyint (1) ou peu

insert 0 ou 1 à ce champ

voir ce post de la différence:

Tinyint vs Bit

+0

Merci pour la clarification! – Trufa

4

Je préfère aucun de bool, BIT, TINYINT (1). parce qu'aucun d'entre eux n'est réellement booléen. Vous pouvez vérifier le lien suivant pour 'pourquoi':

http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

J'utiliser mieux: ENUM ('false', 'true') non nulle - comme type de données. Vous pouvez passer 'vrai' ou 'faux' (comme des chaînes) à partir de PHP. Et il ne faudra que 1 octet pour le stocker!

+0

Pourquoi pas ENUM ('0', '1') à la place – tormuto

+2

En fait, la chaîne '' false '' est, ironiquement, vraie en PHP. – jonbaldie

+0

@tormuto oui, vous pouvez. cela aiderait le cast automatique en PHP lors de la lecture. Mais avec ENUM, il n'est pas prudent de le faire car vous pouvez oublier de passer des chaînes de PHP. Que se passerait-il si quelqu'un déclarait par erreur ENUM ('1', '0')? J'ai vu beaucoup de codes comme ('oui', 'non'). – Muktadir

0

Je pense que depuis que vous voulez vraiment appliquer une valeur booléenne (0,1) contrainte sur un champ de table mysql, le meilleur coup est uning ENUM

CREATE TABLE table_name(
    boolean_field_name ENUM('0', '1') 
); 
Questions connexes