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

Oracle Discussion :

Diff. de taille physique entre CHAR(1) et VARCHAR2(1)


Sujet :

Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 45
    Points
    45
    Par défaut Diff. de taille physique entre CHAR(1) et VARCHAR2(1)
    Bonjour,
    Afin de minimiser une taille de table, j'aimerai savoir si quelqu'un connait la différence de taille (au niveau physique) entre un CHAR(1) et un VARCHAR2(1) sous oracle version 8i et plus. J'ai lu, il y a quelque temps qu'Oracle réserve 3 octets pour chaque VARCHAR2 créé. Qu'en est-il pour les VARCHAR2(1) ou VARCHAR2(2) et VARCHAR2(3). Sont-ils plus grand (en taille physique) que les CHAR(1), CHAR(2) et CHAR(3) ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    La taille réservée aux variables de type CHAR et VARCHAR2 dépend de l'argument passé lors de leur déclaration :

    x VARCHAR2(2 BYTE) réserve un emplacement pour 2 octets
    x VARCHAR2(2 CHAR) réserve un emplacement pour 2 caractères

    iden pour CHAR

    sachant que le nombre d'octets utilisés pour stocker un caractère dépend du DATABASE character set.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 45
    Points
    45
    Par défaut
    Merci beaucoup pour les informations.

    Dans ce cas là où la taille est la même, que vaut-il mieux créer dans une table :
    un CHAR( 1 BYTE) ou un VARCHAR2(1 BYTE) ?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    c'est la même chose.

    le type CHAR est utilisé lorsque vous souhaitez que vos variables soient entièrement valorisées (Oracle ajoute autant d'espaces nécessaire en fin de chaine) alors que le TYPE VARCHAR2 ne stocke que les caractères insérés.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Je ne sais plus d'où je tiens ça mais je pensais que en interne les zones en varchar2 sont moins gourmandes que les zones char sauf pour les petites données ( longueur < à 5 ).

    un char(2) valorisé ou pas mobilise 2 octets.
    un varchar(2) valorisé mobilise 2 octets + 2 octets pour stocker la longueur.

    :

  6. #6
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Il n'y a pas de différence entre le varchar2(1) et le char(1).

    Par contre, la différence sur le stockage en base intervient sur les varchar2 correspondants à une chaine de caractères et non à 1 caractère.

    En base, lors de la déclaration en base d'une ligne d'une table avec un char(n), les n bytes sont utilisés. Oracle remplira les n bytes même si la chaine est plus petite.

    Pour le varchar2, il n'utilisera que la taille utile.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    test@BROCANTE> create table t5 (t_varchar varchar2(1000));
     
    Table crÚÚe.
     
    EcoulÚ : 00 :00 :00.32
    test@BROCANTE> create table t6 (t_char char(1000));
     
    Table crÚÚe.
     
    EcoulÚ : 00 :00 :00.16
    test@BROCANTE> insert into t5 select object_name from all_objects;
     
    1933 ligne(s) crÚÚe(s).
     
    EcoulÚ : 00 :00 :00.50
    test@BROCANTE> insert into t6 select object_name from all_objects;
     
    1933 ligne(s) crÚÚe(s).
     
    EcoulÚ : 00 :00 :01.53
    test@BROCANTE> analyze table t5 compute statistics;
     
    Table analysÚe.
     
    EcoulÚ : 00 :00 :00.63
    test@BROCANTE> analyze table t6 compute statistics;
     
    Table analysÚe.
     
    EcoulÚ : 00 :00 :06.50
    test@BROCANTE> select table_name, column_name, data_type, data_length,
    AVG_COL_LEN from user_tab_columns;
     
    TABLE_NAME COLUMN_NAM DATA_TYPE  DATA_LENGTH AVG_COL_LEN
    ---------- ---------- ---------- ----------- -----------
    T5         T_VARCHAR  VARCHAR2          1000          14
    T6         T_CHAR     CHAR              1000        1000
     
    2 ligne(s) sÚlectionnÚe(s).
     
    EcoulÚ : 00 :00 :00.47
    test@BROCANTE> select table_name, avg_row_len, avg_space from user_tabl
    es;
     
    TABLE_NAME AVG_ROW_LEN  AVG_SPACE
    ---------- ----------- ----------
    T5                  17        468
    T6                1006        951
     
    test@BROCANTE> select segment_name, bytes, blocks from user_segments;
     
    SEGMENT_NA      BYTES     BLOCKS
    ---------- ---------- ----------
    T5             131072         64
    T6            4063232       1984
    Il y a une différence sur les déclarations des variables VARCHAR2 en PL/SQL par contre.

  7. #7
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 45
    Points
    45
    Par défaut
    OK merci beaucoup

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

Discussions similaires

  1. [SQL 2K]"select in" entre char et varchar
    Par fredfred dans le forum Développement
    Réponses: 1
    Dernier message: 27/05/2008, 10h43
  2. restauration 'physique' entre une 8i et une 9i
    Par genio dans le forum Oracle
    Réponses: 7
    Dernier message: 11/10/2007, 09h34
  3. [Free Pascal] Mini-tutoriel : Différence entre char et chr (auto-analyse de code)
    Par Clandestino dans le forum Free Pascal
    Réponses: 14
    Dernier message: 24/03/2007, 18h18
  4. Taille d'un char
    Par ferry.jules dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2006, 16h34
  5. [ Tomcat ] Couper tout lien physique entre BD et la Servlet.
    Par spk4ever dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/01/2006, 10h56

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