IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils MySQL Discussion :

Boolean sur MySql


Sujet :

Outils MySQL

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Par défaut Boolean sur MySql
    J'utilise EasyPHP 1.8
    Comment créer et définir un champ boolean?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create table MATERIEL
    (
       CODE_MATERIEL                varchar(5)                     not null,
       GARENTIE_MATERIEL          varchar(2),
       ACTIVE_MATERIEL             bool,
       /* Est-ce ainsi la définition d'un champ boolean ? */
       primary key (CODE_MATERIEL)
    )
    type = InnoDB;
    Où il manque quelque chose à ma code de création?

    Quelle est la syntaxe pour inserer la valeur "ture" ou "false" sur ACTIVE_MATERIEL

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    Salut,

    Quand je créer un type bool dans phpMyAdmin il me met mon champs en tinyint (1) donc je ne sais pas si le type bool existe vraiment.

    Donc tu peut créer un champs de type tinyint (1) il ne peut prendre comme valeur que 0 et 1.
    0 => false
    1 => true

    A++

  3. #3
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    c'est ça. et ça marche.

    bool ou boolean comme tu veux

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

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Bonjour,

    Le type booléen existe comme mot-clef dans MySQL. Mais effectivement, c'est un "faux" booléen, vu que boolean est un synonyme de tinyint (soit un entier codé sur 1 octet), et peut donc prendre 256 valeurs entières, et non pas les valeurs TRUE ou FALSE.
    C'est donc à toi de renseigner correctement ce champ, avec par convention FALSE => 0 et TRUE => 1.
    Mais MySQL ne te bloquera pas une valeur 2 dans ce champ...

    Ca doit venir dans les versions futures...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Par défaut
    Merci à vous trois

  6. #6
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    en MySQL pour du booléen je préconiserais plus de l'enum('FALSE','TRUE') ou enum('0','1')

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Par défaut le type ENUM
    Citation Envoyé par SphynXz Voir le message
    en MySQL pour du booléen je préconiserais plus de l'enum('FALSE','TRUE') ou enum('0','1')
    Je préfère également la solution avec le type ENUM qui est plus 'sécurisée' mais le problème est qu'il s'agit d'une énumération de chaîne de caractères uniquement. Du coup une requête du tpye :

    SELECT * FROM matable WHERE monpseudobooleen = 1

    ne fonctionnera pas, il faut mettre des quotes et écrire :

    SELECT * FROM matable WHERE monpseudobooleen = '1'

    Y-a-t-il moyen de contourner cette contrainte ?

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut Attention avec les enum '0','1'
    Citation Envoyé par foxdie Voir le message
    Je préfère également la solution avec le type ENUM qui est plus 'sécurisée' mais le problème est qu'il s'agit d'une énumération de chaîne de caractères uniquement. Du coup une requête du tpye :

    SELECT * FROM matable WHERE monpseudobooleen = 1

    ne fonctionnera pas, il faut mettre des quotes et écrire :

    SELECT * FROM matable WHERE monpseudobooleen = '1'

    Y-a-t-il moyen de contourner cette contrainte ?
    Là je te recommande de faire très attention avec les enum. Car cela joue des tours pendables !!!!

    Prenon un exemple avec l'enum suivant
    mon_champ ENUM('small', 'medium', 'large')

    si tu fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE mon_champ = 2
    le 2 est un entier et mysql va le caster en enum. pour caster un entier en enum il faut savoir que chaque valeur à un index et que mysql commence à partir de 1 et c'est cet index qui est utilisé pour le cast. Dans notre cas le 2 sera casté en 'medium'.

    1 => 'small'
    2 => 'medium'
    3 => 'large'

    Jusque là rien de bien méchant...

    Maintenant regardons avec l'exemple de foxdie

    monpseudobooleen ENUM('0','1')
    1 => '0'
    2 => '1'

    Premier cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE monpseudobooleen = 0
    Dans ce cas mysql ne retournera aucun enregistrement. Ce qui est curieux c'est que si tu met un entier qui n'est pas un index de ton enum il n'y aura aucun warning ni erreur ...

    Pire encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE monpseudobooleen = 1
    Dans ce cas le 1 va être casté en '0' ... Ce qui fait que la requette aura l'effet inverse de celui attendu.

    Juste pour info je me suis fait baisé plusieurs fois et sur un site on a eu des newsletter qui sont parties chez tous les gens qui s'étaient désinscrit et pas chez les autres

    Moi je suis plutôt partisant du tinyint car tu n'as pas de mauvaise surprise.

  9. #9
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Par défaut
    bonjour tous le monde


    MySQL n'a pas de type de données booléen interne. Il utilise le plus petit type de données entier - TINYINT.

    Le BOOLEAN et BOOL sont équivalents de TINYINT (1), car ils sont synonymes.

    Essayez de créer cette table -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     CREATE TABLE MA_TABLE (
      MA_column BOOLEAN DEFAULT false);
    Ensuite, exécutez SHOW CREATE TABLE, vous obtiendrez cette sortie -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `MA_TABLE` (
      `MA_column` tinyint(1) DEFAULT '0'
    )
    Affected rows: 0
    Time: 0.052s

  10. #10
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 778
    Par défaut
    Salut annabil23 .

    Est-ce que tu as regardé la date du dernier post ? Cela remonte à plus de sept ans !
    Pourquoi déterrer un vieux sujet, pour répondre ce qui a été dit dans le même sujet ?

    @+

  11. #11
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Par défaut
    bonjour

    car je suis tombé sur le même problème et j'ai trouvé cette solution.
    Et c'est ça, le forum.

    merci bien @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Foreign Key sur Mysql
    Par lemagicien dans le forum Outils
    Réponses: 1
    Dernier message: 23/09/2005, 13h39
  2. export base 4D sur mysql ou sqlserver
    Par jarod71 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/07/2004, 12h55
  3. pb avec la fonction boolean sur eclipse
    Par mcay dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/05/2004, 09h37
  4. driver sur mySql
    Par sampq dans le forum Installation
    Réponses: 8
    Dernier message: 19/08/2003, 09h15
  5. possible sur MySQL 4.0 ?
    Par djforest dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/06/2003, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo