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 régulier
    Inscrit en
    juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 83
    Points : 70
    Points
    70
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2007
    Messages : 23
    Points : 27
    Points
    27
    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 éclairé 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
    Points : 786
    Points
    786
    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
    5 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : avril 2002
    Messages : 5 813
    Points : 23 006
    Points
    23 006
    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 régulier
    Inscrit en
    juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 83
    Points : 70
    Points
    70
    Par défaut
    Merci à vous trois

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    en MySQL pour du booléen je préconiserais plus de l'enum('FALSE','TRUE') ou enum('0','1')
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  7. #7
    Membre du Club

    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
    Points : 45
    Points
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 2
    Points : 11
    Points
    11
    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 à l'essai
    Inscrit en
    janvier 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 25
    Points : 21
    Points
    21
    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
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    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 : 4 310
    Points : 12 548
    Points
    12 548
    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 ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Membre à l'essai
    Inscrit en
    janvier 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 25
    Points : 21
    Points
    21
    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, 14h39
  2. export base 4D sur mysql ou sqlserver
    Par jarod71 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/07/2004, 13h55
  3. pb avec la fonction boolean sur eclipse
    Par mcay dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/05/2004, 10h37
  4. driver sur mySql
    Par sampq dans le forum Installation
    Réponses: 8
    Dernier message: 19/08/2003, 10h15
  5. possible sur MySQL 4.0 ?
    Par djforest dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/06/2003, 10h49

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