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

 MySQL Discussion :

Valeur en octet suivant la valeur du champ.


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Par défaut Valeur en octet suivant la valeur du champ.
    Bonjour,
    J'ai un champ qui doit contenir des entiers inférieur à 990.
    Je ne peux donc lui mettre un type TINYINT qui j'ai cru comprendre ne dépasse pas les entiers de + de 255.

    Ce qui me gêne c'est que sur 40000 données de ce champs, seulement 200 contiennent un entier supérieur à 100, tout le reste se trouve entre 970 et 990

    J'utilise le type SMALLINT qui me coûte 2octets et j'aimerais savoir si il y a moyen que mes champs qui contiennent un entier de 100 n'utilisent automatiquement dans SQL qu'un seul octet ?

    Une question hors sujet : l'option taille valeurs pour un entier sert juste à limiter le champ mais le nombre d'octet lui ne change pas ? même si par exemple un SMALLINT est limité a 2 chiffres ?

    Merci.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ton ordinateur a t-il 30 ans pour que tu sois à la chasse aux octets à ce point ?

    Puisque les valeurs peuvent aller jusqu'à 990, va pour le SMALLINT ! Ça te fait 40 000 octets de plus, soit 39 ko. C'est pas la mer à boire quand même !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Par défaut
    Je pensais bien que pour le cas que je soumet vous me trouveriez pointilleux et j'en suis désolé.
    Ce qui m'intéresse c'est de savoir diminuer mes octets dynamiquement suivant la valeur du champ, que si par exemple mon champ à une valeur plus basse que 256 alors le type de mon champs soit égal à 1octet soit tinyInt, et faire cette opération automatiquement dans mon serveur de base de donnée.

    Merci pour votre réponse.

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    bonjour,

    c'est impossible. A un champ correspond un unique type de données

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Par défaut
    Bonsoir, merci pour la réponse.

    Est il possible d'avoir un champ qui contient deux autres champs ? l'un avec un type smallint et l'autre avec un tinyint ?

    Et j'ai une idée surement fausse.. un champ de type smallint, même s'il ne contient rien il aura dans chaque nouvel enregistrement un poid de 2 octet ?

    Parce que sinon je pensais faire un déclencheur du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TRIGGER AjoutCP AFTER INSERT ON ville
    FOR EACH ROW
    BEGIN
     
    IF (NEW.CP < 256 ) THEN
    BEGIN
     
    DECLARE @ID int
    DECLARE @CP tinyint
    SET @ID = NEW.ID
    SET @CP = NEW.CP
     
    UPDATE ville
    SET CP = '', CP_tinylInt = @CP
    WHERE id = @ID
     
    ENDIF
     
    END
    Pour l'explication, ma table contiendrait deux champ CP, un champ CP de type smallint et un champ CP_tinyInt de type tinyint.
    Si lors d'un nouvel enregistrement la valeur du champ est inférieur à 256, alors je la déplace dans le champ CP_tinyInt.

    Maintenant je pense que c'est nul car un champ vide à toujours le poid de son type n'est ce pas ?

    Merci.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je pense effectivement qu'une colonne (et pas champ !) occupera l'espace pour lequel elle est prévue, qu'il y ait une valeur ou non, mais ton truc pour le coup reviendrait à alourdir la BDD puisqu'il y aurait deux colonnes au lieu d'une. Sans compter l'exécution du trigger qui est plus longue qu'un simple insert.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/05/2014, 20h02
  2. Réponses: 4
    Dernier message: 27/03/2008, 23h01
  3. Réponses: 4
    Dernier message: 25/04/2007, 16h23
  4. Réponses: 3
    Dernier message: 23/04/2007, 11h55
  5. Réponses: 11
    Dernier message: 30/03/2007, 10h30

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