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

MySQL Discussion :

Erreur SQL (1062) : Duplicata du champ casse / Index sensible à la casse


Sujet :

MySQL

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut Erreur SQL (1062) : Duplicata du champ casse / Index sensible à la casse
    Bonjour,

    Sous MARIADB

    J'ai la table ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `checkk_players` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT,
    	`casse` ENUM('i','s') NOT NULL DEFAULT 'i' COLLATE 'utf8mb4_general_ci',
    	`mot` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
    	PRIMARY KEY (`id`) USING BTREE,
    	UNIQUE INDEX `idx_all` (`casse`, `mot`) USING BTREE
    )
    COLLATE='utf8mb4_general_ci'
    ENGINE=InnoDB
    ROW_FORMAT=DYNAMIC
    ;

    J'ai inséré la valeur "Duje Ćaleta-Car" => accent sur le C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `checkk_players` ( `casse`, `mot`) VALUES ( 'i', 'Duje Ćaleta-Car');
    Si j'insère la valeur "Duje Caleta-Car" , j'ai l'erreur 1062

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `checkk_players` (`casse`, `mot`) VALUES ( 'i', 'Duje Caleta-Car');
    Erreur SQL (1062) : Duplicata du champ 'i-Duje Caleta-Car' pour la clef 'idx_all'
    Si je fait un select pour rechercher "Duje Caleta-Car" , je n'ai aucune ligne de retournée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM checkk_players WHERE BINARY mot='Duje Caleta-Car'

    Est- il possible d'insérer "Duje Ćaleta-Car" et "Duje Caleta-Car" ?

    J'ai besoin de faire un recherche sensible a la casse majuscule/minuscule, en prenant en compte des accents

    Merci beaucoup vos conseils/aide

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Il faut utiliser la collation adéquate.

    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/ * * * * *

  3. #3
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Il faut utiliser la collation adéquate.

    A +
    Si j'ai bien compris la réponse je devrais utiliser :
    utf8mb4_bin

    Mais ensuite comment je fais une recherche insensible a la casse ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Il faut préciser la collation à utiliser lors de la comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select all
        'é' = 'e' collate utf8mb4_bin, -- FALSE
        'é' = 'e' collate utf8mb4_general_ci -- TRUE
    ;
    Voir les collations dispos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show collation like 'utf8mb4%';
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    En marge de cette question, vu que la colonne "CASSE" ne peut prendre que deux valeurs, il est contre-performant de la choisir comme première colonne de l'index "idx_all", il est préférable de mettre la colonne la plus discriminante en premier.
    Par ailleurs, il est inutile de repréciser la collation de chaque colonne si celle-ci est la même que celle de la table.

  6. #6
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Il faut préciser la collation à utiliser lors de la comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select all
        'é' = 'e' collate utf8mb4_bin, -- FALSE
        'é' = 'e' collate utf8mb4_general_ci -- TRUE
    ;
    Voir les collations dispos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show collation like 'utf8mb4%';
    Merci beaucoup

  7. #7
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    En marge de cette question, vu que la colonne "CASSE" ne peut prendre que deux valeurs, il est contre-performant de la choisir comme première colonne de l'index "idx_all", il est préférable de mettre la colonne la plus discriminante en premier.
    Par ailleurs, il est inutile de repréciser la collation de chaque colonne si celle-ci est la même que celle de la table.
    Merci beaucoup

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

Discussions similaires

  1. #1062 - Duplicata du champ '1' sous php myadmin
    Par likethepsycho dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/03/2009, 12h19
  2. [MySQL] message d'erreur sql : champ inconnu
    Par fredostar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/05/2008, 03h06
  3. [MySQL] Erreur SQL, #1062
    Par zertu dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/05/2008, 18h29
  4. Erreur MySQL : #1062 Duplicata du champ
    Par akrobat dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 17/03/2008, 20h40
  5. erreur sql 1062 lors de l'import de données
    Par phebus29 dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 23/06/2006, 19h21

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