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

Firebird Discussion :

Comment convertir un boolean?


Sujet :

Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut Comment convertir un boolean?
    Bonsoir;
    Lors de ma première conversion de ma base de données qui était en paradox vers Firebird, j'ai convertis mes champs boolean en champs smallint.
    Mais je me pose, maintenant, la question si ce n'est pas beaucoup mieux de les convertir en char(1)?
    Pourtant je pense que char(1) est beaucoup plus léger que smallint mais la plus part des outils de conversion vers Firebird convertissent les champs boolean en smallint ou même integer .

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Tout simplement que le smallint ou integer se rapproche le plus de ce que pourrait être un vrai boolean.

    Le plus souvent les langages de programmation code les boolean sur un octet (mais certain le code sur plus : un mot, un double voir même un long (4 octets)).

    D'un point de vue binaire, en utilisant les valeurs 0 pour faux, et 1 (ou -1) pour vrai, le bit le plus faible sera a zéro pour faux et a 1 pour vrai. Ce qui est parfait pour les opérateurs binaires.

    Si votre question c'est de savoir si un char ou un smallint (integer) sera plus performant, je dirais que c'est du pareil au même...

    Si c'est une question d'occupation disque ou mémoire, vous vous embêtez pour rien, car CHAR(1) ne prend pas forcément 1 octet cela dépend du charset utilisé et de la lettre mise dedans.

    Donc a mon avis le mieux c'est d'utiliser un smallint et même de créer un domaine. En attendant firebird 3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* Null pour indéterminé , 0 pour faux et 1 pour vrai */
    CREATE DOMAIN BOOLEAN
    AS SMALLINT
    CHECK (value is null or value in (0, 1));
     
    /* Utilisation : */
    CREATE TABLE Ma_Table
    (
    ECHU      BOOLEAN, /* Absence de valeur (null) (indeterminé) ou 0 (faux) ou 1 (vrai) */
    AFinir    BOOLEAN NOT NULL, /* Valeur obligatoire 0 (faux) ou 1 (vrai)*/
    ...
    );

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut
    Citation Envoyé par Barbibulle Voir le message
    Si c'est une question d'occupation disque ou mémoire, vous vous embêtez pour rien, car CHAR(1) ne prend pas forcément 1 octet
    C'est de ça que je parle, mais même s'il ne prend pas 1 octet, je pense qu'il ne va pas prendre la même taille mémoire que integer. Non?
    Et quelque soit la différence minime entre les deux tailles, elle sera considérable si l'on arrive au nombre de centaines de milliers d'enregistrements.
    Citation Envoyé par Barbibulle Voir le message
    cela dépend du charset utilisé et de la lettre mise dedans.
    Comment choisir le charset et la lettre mise dedans?

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    non

    Smallint est au moins sur 2 octets

    Char(1) CHARACTER SET NONE est au moins sur 1 octet

    Reste à savoir comment ils sont enregistrés sur un disque il est très probable que ces deux types occupent la même place.

    De plus même s'il y avait un octet de différence quelle importance ?
    Si vous avez une base avec des millions d'enregistrements ca ne ferait que quelques Mega octets. Sachant que les disques actuelles font des centaines de Giga pour les plus petits...

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut
    Alors vous opter pour smallint?
    pourquoi pas alors integer?

Discussions similaires

  1. Comment convertir une string en boolean ?
    Par olivier12345600 dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2005, 15h54
  2. Réponses: 6
    Dernier message: 14/02/2004, 14h01
  3. Comment convertir un lecteur du NTFS au Fat32
    Par Cyberman dans le forum Composants
    Réponses: 8
    Dernier message: 24/11/2003, 21h38
  4. Réponses: 3
    Dernier message: 28/09/2003, 10h46
  5. Comment convertir un Jpeg en .ico
    Par Valéry dans le forum Outils
    Réponses: 5
    Dernier message: 04/07/2003, 09h43

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