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

SQL Oracle Discussion :

Colonne de type caractère


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut Colonne de type caractère
    * Bonjour, *

    Dans quel cas préférer le type varchar2 au type char pour la définition d'une colonne de type caractère?

    * Merci *

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Dans la plupart des cas.

    Un type char réservera la totalité de l'espace typé (sauf si null, à vérifier avec Oracle), tandis qu'un varchar ne réservera que la longueur de la chaine + 1 ou 2 octets pour connaitre la longueur de la chaine.

    Au final on gagnera beaucoup en place disque pour peu que la base soit un peu plus grosse que 5mo (ne pas oublier aussi les index rattachés à cette colonne)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Tom Kytes préconise même d'utiliser systématiquement VARCHAR2.

    Le seul cas de figure où il utilise encore CHAR, c'est pour les CHAR(1) parce que c'est plus rapide à écrire.

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Pour mon info personnelle :

    Il me semble que l'emploi de VRACHAR2 posait un problème lors de la modification de la longueur 'utile' d'un VARCHAR2 (dépassement de la taille de bloc et création de CHAINED ROWS). Ce problème existe-t-il toujours ? Si non , à partir de quelle version ? Si oui, cela est-il vraiment un problème ?

  5. #5
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Physiquement, c'est stocké de la même manière.
    La seule différence c'est que CHAR va rajouter des espaces jusqu'à la taille maximale. Mais je ne vois aucune utilité à cela. Sauf s'il existe une raison métier pour considérer que 'TEXTE' est différent de 'TEXTE '. Et encore, autant rentrer directement la chaîne avec les espace plutôt que de s'appuyer sur un remplissage automatique.

    De toute façon, tous les langages clients utilisent des chaînes à taille variable. Les stocker autrement en base de donnée n'est que source de problèmes.

    Citation Envoyé par Garuda Voir le message
    Pour mon info personnelle :
    Il me semble que l'emploi de VRACHAR2 posait un problème lors de la modification de la longueur 'utile' d'un VARCHAR2 (dépassement de la taille de bloc et création de CHAINED ROWS). Ce problème existe-t-il toujours ? Si non , à partir de quelle version ? Si oui, cela est-il vraiment un problème ?
    La plupart des types de données sont à taille variable. Il vaut mieux utiliser PCTFREE pour réserver de l'espace pour les augmentations de taille plutôt que de remplir avec des espaces.

    Cordialement,

    Franck.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Pour mon info personnelle :

    Il me semble que l'emploi de VRACHAR2 posait un problème lors de la modification de la longueur 'utile' d'un VARCHAR2 (dépassement de la taille de bloc et création de CHAINED ROWS). Ce problème existe-t-il toujours ? Si non , à partir de quelle version ? Si oui, cela est-il vraiment un problème ?
    Ce problème n'est pas liés aux type des données mais au manque d'espace disponible dans le bloc suite à un mise à jour d'un enregistrement.

  7. #7
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Merci pour vos réponses !

    mais la question était (reformulation):
    Selen votre expérience, est-ce que le fait de multiplier le nombre de bloc à lire lors du dépassement pose vraiment un problème d'exploitation et impose donc un traitement périodique des 'CHAINED ROWS' ou est ce que c'est un faux problème ?
    NB : Personnellement, je ne m'en occupe jamais en exploitation, mais je n'utilise pas non plus une base gigantesque .

    Quant à utiliser autre chose que des VARCHAR2 pour stocker des chaines de caractéres, dieu m'en préserve !!!

  8. #8
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Ce problème n'est pas liés aux type des données mais au manque d'espace disponible dans le bloc suite à un mise à jour d'un enregistrement.
    Justement ! j'avais cru comprendre que les seuls cas ou cela pouvait se produire était lors de "l'agrandissement" d'une chaine (le 'variable' de varchar2) .Me trompe-je ?
    Exemple : pour une champs 'commentaire' VARCHAR2(2000), 10 caractéres utlisés lors de l'iNSERT, 1500 caractéres lors de l'UPDATE,

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/08/2013, 18h17
  2. Réponses: 2
    Dernier message: 06/05/2008, 10h52
  3. Réponses: 5
    Dernier message: 19/04/2005, 09h46
  4. colonnes de type auto incremental
    Par Bill_Baroud dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/12/2004, 12h28
  5. requete vers une colonne de type datetime
    Par Zorgz dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2003, 12h37

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