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
    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
    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é
    c'est ça. et ça marche.

    bool ou boolean comme tu veux

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

  4. #4
    Rédacteur/Modérateur

    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
    Merci à vous trois

  6. #6
    Membre confirmé
    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
    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
    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
    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
    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
    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 @+

###raw>template_hook.ano_emploi###