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 5.0.33] UTF8 - Accents - Clé unique : INSERT et ORDER BY


Sujet :

Requêtes MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut [MySQL 5.0.33] UTF8 - Accents - Clé unique : INSERT et ORDER BY
    Bonjour,

    Je dispose d'un serveur mySQL dont les caractéristiques sont les suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Version 5.0.33
    Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) 
    Interclassement pour la connexion MYSQL : UTF8_unicode_ci
    Requête proposée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test` ( `test` varchar(8) collate utf8_unicode_ci NOT NULL, UNIQUE KEY `test` (`test`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    INSERT INTO `test` VALUES ('é'); INSERT INTO `test` VALUES ('e'); INSERT INTO `test` VALUES ('z');
    -->#1062 - Duplicata du champ 'e' pour la clef 'test'
    Sous MySQL il semblerait qu'en utf8_unicode_ci, au niveau du tri 'é'='e' mais malheureusement également au niveau de l'insertion donc une fois le 'é' inséré, le 'e' ne peut pas l'être puisque la clé est unique. J'ai remplacé dans la requête utf8_unicode_ci par utf8_bin : la requête passe mais un SELECT ... ORDER BY test; donne la séquence 'e','z','é' car en utf8_bin les caractères accentués sont classés après l'alphabet non accentué.

    J'ai trouvé 2 solutions qui me conviennent mal toutes les deux :
    • Remplacer la clé unique par un simple index ce qui complique évidemment les codes d'insertion et de modification dans la table si l'on veut gérer l'unicité du champ...
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      CREATE TABLE `test` ( `test` varchar(8) collate utf8_unicode_ci NOT NULL, KEY `test` (`test`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    • Modifier les caractéristiques du serveur ainsi
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) 
      Interclassement pour la connexion MYSQL : latin1_swedish_ci
      La requête proposée initialement passe sans modification et le tri est correct. Mais le même genre d'interclassement sur un jeu de caractères dans une requête de création de table provoque une erreur :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      --> #1253 - COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
      Cela semble passer au niveau des caractéristiques du serveur mais est-ce recommandé ?


    Connaissez-vous une autre solution en utf8 avec MySQL 5 ?

    Merci d'avance. Cordialement. Gilles
    Dernière modification par Invité ; 09/06/2009 à 08h36. Motif: Précisions

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Visiblement cela n'inspire personne. J'ai vérifié sur un PostgreSQL-8 avec encodage serveur UTF8 (et client UTF8).
    Une table identique à celle produite sous MySQL fonctionne correctement : elle permet l'insertion des enregistrements 'e' et 'ê' dans un champ défini comme clé unique et le tri respecte notre alphabet (accentuation comprise) : rien de révolutionnaire évidemment, mais c'est curieux ce problème... et spécifique à MySQL visiblement.


    Le problème n'est en réalité par très important pour moi puisque nous utilisons peu MySQL dont la politique au niveau des licences nous semble trop subtile et variable...

    On laisse tomber donc. On ne va pas se prendre la tête. Bon WE. Cordialement. Gilles
    Dernière modification par Invité ; 05/06/2009 à 18h33.

Discussions similaires

  1. [MySQL] Export mysql vers xls avec les accents
    Par cesar33 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/02/2013, 07h07
  2. MySql, java, String, probleme d'accent.
    Par pigpen dans le forum JDBC
    Réponses: 26
    Dernier message: 26/05/2007, 14h01
  3. Réponses: 14
    Dernier message: 08/08/2006, 11h31
  4. [MySQL 4.1.1 & PHP 5.0.4] INSERT avec tables dépendantes
    Par Benat64 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 30/01/2006, 20h28
  5. [MySQL 4.1] probleme d'accents sur une requete SQL
    Par tatayoyo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/11/2005, 16h06

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