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

MS SQL Server Discussion :

[SQL SERVER 2005] varchar vs. nvarchar vs. char


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [SQL SERVER 2005] varchar vs. nvarchar vs. char
    Bonjour à tous.

    Déjà, désolé si la réponse à ma question a déjà été donnée. J'ai regardé dans la faq et fait une recherche mais je n'ai rien trouvé.

    Ma question est simple.

    Quelle est la différence entre ces trois types de données? Me semble que j'ai lu que nvarchar c'est de l'unicode mais à part ça... Je reste perplexe. D'ailleurs, c'est quoi unicode ?

    Merci d'avance.

    Griftou.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Par défaut
    en effet nvarchar c'est de l'unicode.

    L'unicode c'est l'utilisation de différent alphabet, si tu veux utiliser du chinois, de l'arabe, du japonais ou autre ce sera des caractères unicodes

    L'unicode est stocké sur 2 bytes au lieu de 1 donc la chaine prendra le double de place pour le même texte.
    C'est a voir si l'application en a besoin.

    Varchar et char, char est une chaine avec un nombre de caractère fixe, si l'on crée un char(10) la chaine fera toujours 10 caractère, varchar prendra la valeur qu'il faut avec comme maximum celui qu'on lui a fixé.

    char est util en terme de performance dans certains cas, des index, clés primaires sur des varchars n'est pas optimisé. C'est à vous de voir ça comment le gérer

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'aime quand les réponses sont claires, nettes et précises.

    Merci beaucoup !

    Griftou.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    N signifie NATIONAL pour UNICODE. Le seul intérêt d'UNICODE est de pouvoir utiliser des alphabets ideographique ou de permettre de mélanger différents alphabets dans une même base de données.
    En dehors du N, les autres types littéraux sont codés en ASCII qui ne permet qu'un seul alphabet non ideographique mais décliné (par exemple latin).
    Comme NATIONAL utilise 2 fois plus d'espace que le codage ASCII le volume des données sera deux fois plus gros donc deux fois moins performant au minimum, mais avec les effets de mise en cache, cela peut être beaucoup plus contre performant...
    CHAR impose que la longueur stockée soit pleinement utilisée. Si la donnée est moins longue que la taille max, alors il y a remplissage à blanc dans le sens de complétude (à droite pour les alphabets latins, à gauche pour l'arabe...).
    VARCHAR stocke la longueur exacte de la donnée dans la limite du maximum indiqué.
    Inconvénients et avantages :
    VARCHAR ne peut être accédé directement et impose de stocker en sus de la donnée la longueur vraie. Il économise du stockage si la longueur vraie des données varie fréquemment.
    CHAR ne fragmente pas les structures de stockage et son repérage dans une ligne est instantané. Il est donc préférable pour des données fréquemment recherchées.
    Enfin du fait que le VARCHAR impose de stocker en sus la longueur vrai, un VARCHAR(5) sera plus couteux et plus volumineux à tout point de vue qu'un CHAR(5) si la données est toujours complète, comme c'est le cas d'un code postal par exemple.
    En particulier les colonnes composant une clef (primaire, unique ou étrangère) ne devrait jamais être de type VARCHAR pour des raisons de performances...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ce qui me conforte dans mon choix du type char.

    Merci encore !

    Griftou.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Me revoilà avec le même genre de question mais cette fois avec Money et Float ou Decimal.

    Griftou.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Par défaut
    Salut,

    Money --> Comme indiquer gere de la monnaie

    Decimal --> Gere des nombres a virgule a precision fixe

    Float --> Gere des nombres à virgule a precision flottante (approximation)

    Le tout avec une notion de taille de stockage.

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

Discussions similaires

  1. [SQL SERVER 2005] problème de caractère fonction char()
    Par jibjib dans le forum Développement
    Réponses: 2
    Dernier message: 11/07/2008, 12h49

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