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

Requêtes MySQL Discussion :

MySQL contrainte d'unicité sur chaine de caractère.


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut MySQL contrainte d'unicité sur chaine de caractère.
    Bonjour,

    Je souhaite créer une contrainte d'unicité sur une chaine de chaine de caractère, en prenant compte des caractères accentués et la casse. Ma table actuelle est structurée de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE `labels_languages` (
      `label_id` bigint(20) NOT NULL,
      `label_lang` varchar(255) NOT NULL,
      `label_lang_long` text,
      `language_id` char(20) NOT NULL,
      PRIMARY KEY (`label_id`),
      UNIQUE KEY `label_lang_key` (`label_lang`),
      CONSTRAINT `ll_label_id_fk` FOREIGN KEY (`label_id`) REFERENCES `labels` (`label_id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    En effet, lors d'une insertion de données, une erreur de duplication m'est renvoyée lors de l'insertion de 'GUERIN' dans label_lang, sachant que 'Guérin' a déjà été inséré.

    Le charset est latin1 latin1_general_ci

    Merci de votre aide bonne journée.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    De mémoire, je crois qu'il te suffit de déclarer la colonne BINARY et ça devrait le faire.
    en fait voici la syntaxe exacte

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Merci, cela aurait pu être une réponse, car effectivement, un "varbin" permet une comparaison casse sensible, mais les données seront donc affichées de manière binaire depuis un client.

    Solution que j'ai opté pour un index casse sensible (ou une recherche, car je viens d'apprendre que MySQL recherche par défaut de manière casse insensible):

    spécifier une collation casse sensible pour le champ voulu, autrement dit dans mon cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE `labels_languages` (
      `label_id` bigint(20) NOT NULL,
      `label_lang` varchar(255) COLLATE latin1_bin NOT NULL,
      `label_lang_long` text,
      `language_id` char(20) NOT NULL,
      PRIMARY KEY (`label_id`),
      UNIQUE KEY `label_lang_key` (`label_lang`),
      CONSTRAINT `ll_label_id_fk` FOREIGN KEY (`label_id`) REFERENCES `labels` (`label_id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Mon champ label_lang a donc une collation spécifique : attention, en binaire, 'toto '='toto'. Si vous ne souhaitez pas ce comportement prenez par exemple (latin1_general_cs) : j'ai aussi compris que cs et is c'était pour casse sensible ou insensible ;-)

    Bonne journée

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

Discussions similaires

  1. Modifier une contrainte d'unicité sur une table mySQL
    Par bernidupont dans le forum Débuter
    Réponses: 2
    Dernier message: 19/02/2013, 14h52
  2. condition sur chaine de caractère
    Par trax44 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 24/01/2007, 15h12
  3. Travail sur chaines de caractères
    Par g.greg45 dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2006, 19h11
  4. Travail sur chaine de caractère
    Par corben dallas dans le forum Access
    Réponses: 4
    Dernier message: 02/01/2006, 19h22
  5. [Debutant][Tableau] Tableau indexé sur chaine de caractères
    Par SamRay1024 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 11h14

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