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 Procédural MySQL Discussion :

type de données pour une liste


Sujet :

SQL Procédural MySQL

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut type de données pour une liste
    Bonjour,


    SVP quel est loe type de données à choisir pour un champ d'une table mysql afin d'enregistrer une liste de valeur string ?

    et Merci d'avance

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    en général varchar(taille) avec 1<=taille<=255

    au delà c'est tinytext, text, medium ou longtext qui conviennent selon la taille voulue
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,

    en général varchar(taille) avec 1<=taille<=255

    au delà c'est tinytext, text, medium ou longtext qui conviennent selon la taille voulue
    salut,

    oui j'ai choisi varchar , mais pour une liste de plusieurs valeurs de même type
    je m'explique :

    j'ai un formulaire avec des input et des select (les sélections peuvent être multiple) ce que j'essaye de faire c'est d'enregistrer les valeurs choisis dans le formulaire dans une table mysql

    donc cette table doit se composer de champs de types varchar et type liste

    est ce que le type ENUM va résoudre le problème ou pas

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    si tu as un nombre figé et petit de valeurs oui enum

    si tu veux de la souplesse alors tu fais un table de ces valeurs et tu utilise l'id de la ligne correspondant dans la table où tu stockes le résultat un <select>

    pour mémoire dans:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value='truc'>bidule</option>
    truc remplace 'bidule' l'ors de l'envoi du formulaire donc si truc est l'id de la ligne de 'bidule' dans la table listant les possibilités, ça permet ce que je te disais

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  5. #5
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Attention, car il y a eu une évolution des types de données sur MySQL, dont la transition c'est faite je ne saurais dire quand exactement, mais ce qui est certain c'est qu'à la v5.5, voici comment les données CHAR et VARCHAR sont définies


    The length of a CHAR column is fixed to the length that you declare when you create the table. The length can be any value from 0
    to 255. When CHAR values are stored, they are right-padded with spaces to the specified length. When CHAR values are retrieved,
    trailing spaces are removed unless the PAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.
    Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective
    maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the
    character set used. See Section E.10.4, “Table Column-Count and Row-Size Limits”.
    In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number
    of bytes in the value. A column uses one length byte if values require no more than 255 bytes, two length bytes if values may
    require more than 255 bytes.
    Donc la différence avec les TINYTEXT, MEDIUMTEXT et LONGTEXT c'est que ceux-ci definissent des chaînes de caractères binaires.

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    pas tout à fait,

    dans tout ces types, la taille en octets d'un caractère dépendant en fait du charset...

    exemple en utf8 un char(255) est stocké dans 3*255 octets (car pour mysql ils ont choisi de ne stocker de l'utf8 que sur 3 au lieu des 6 octets max que prévoit la norme)

    char(n) prend donc en permanence toute la place pour les n caractères... si tu as moins des espace sont rajouté à droite en effet...
    varchar(n) ne stocke que la quantité réelle de caractère dans la chaine et maintient en plus un compteur interne sur 1 octet pour les compter (d'où les 255 max)
    pour ces types si la longueur maxi est dépassée la chaine est tronquée et ils sont tous les 2 stockée directement dans le fichier de donnée de la table...
    Il est donc préférable de stocker toujours dans du varchar plutôt que du char à taille égales si on y stocke de chaines de taille variable...

    tinytext, text, mediumtext et longtext fonctionnent comme varchar mais sont prévus pour de plus grande quantité de données (text a un compteur 16 bits donc permet de stocker 64k caractères)

    chacun de ces types a son équivalent:
    • binary pour char, taille fixée dans le fichier de description de la table, maxi 255, données dans le fichier de données avec les autres colonnes de la table
    • varbinary pour varchar, taille stockée avec les donnée de la table, maxi 255, données dans le fichier de données avec les autres colonnes de la table
    • tinyblob pour tinytext, taille stockée avec les donnée de la table, maxi 255, données dans un fichier de données à part
    • blob pour text, taille stockée avec les donnée de la table, maxi 65k, données dans un fichier de données à part
    • mediumblob pour mediumtext, taille stockée avec les donnée de la table, maxi 24M, données dans un fichier de données à part
    • longblob pour longtext, taille stockée avec les donnée de la table, maxi 4G, données dans un fichier de données à part


    l'autre principale différence est que si tu utilises des données avec un charset (chaines de caractères), les binary et blob les stockent en binaires donc les traitements seront sensibles à la casse contrairement au char et text (sauf collation spéciale)

    lire ça et ça pour plus de détails
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  7. #7
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Ma citation est extraite du manuel officiel de MySQL 5.5. ^^

  8. #8
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Je vais faire une petite traduction pour ceux qui ne comprennent pas l'anglais, petit oubli de ma part désolé

    Citation Envoyé par traduction manuel v5.5
    - La longueur d'une colonne de type CHAR est fixé à la longueur que vous déterminez lors de la création de la table. La longueur peut être toute valeur comprise entre 0 et 255. Lorsque les valeurs de type CHAR sont stockées elles sont complétées à droite jusqu'à la longueur spécifiée. Lorsque les valeurs de type CHAR sont récupérées les espaces supplémentaires sont retirés sauf si le mode PAD_CHAR_TO_FULL_LENGTH SQL est activé.

    - Les colonnes de type VARCHAR sont constituées par des chaînes de longueur variable. La longueur spécifiée peut être comprise entre 0 et 65 535. La longueur maximale effective d'une colonne de type VARCHAR est sujette à la longueur maximale d'une ligne (65 535 octets répartis sur l'ensemble des colonnes) et du jeu de caractères choisi (cf. section E.10.4)

    - Contrairement au CHAR, les données stockées en VARCHAR possèdent un préfixe de 1 ou 2 octet. La longueur du préfixe renseigne la longueur des données en octets. Le prefixe sera de 1 octet si les données stockées ne dépassent pas 255 octets et deux octets si les données dépassent 255 octets.
    Il y a eu tout de même du changement dans les dernières versions.. D'ailleurs je viens de me rendre compte de modifications au niveau de l'utilisation des variables utilisateurs assez conséquente. Je vous prépare cela et vous tiens au courant.

    ++

  9. #9
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est clair... c'est juste l'expression chaine binaire qui me gênait...

    ils ont étendu la taille des varchar et varbinary donc... en permettant un préfixe de 1 ou 2 octect pour le compteur de caractères



    mais heureusement ils ont fait un truc rétro compatible
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. Choix d'un type de données pour une clef
    Par bmayer dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/10/2013, 22h43
  2. Aide demandée pour sélection de données dans une liste
    Par pyprog dans le forum Général Python
    Réponses: 2
    Dernier message: 15/08/2006, 21h11
  3. Type de données pour effectuer une différence en vba
    Par snoopy69 dans le forum Access
    Réponses: 4
    Dernier message: 03/03/2006, 07h49
  4. Réponses: 3
    Dernier message: 07/02/2006, 13h26
  5. Comment faire pour récup une donnée d'une liste déroulante
    Par magic8392 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/03/2005, 15h00

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