Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] Jeux de caractères, interclassement et conversion

Chronique d'une noyade

    12 septembre 2010 à 15:01:46

    Bonjour à tous,

    Je viens demander votre aide car là je me noie complétement dans ma base Mysql où j'ai réussi à opérer un mélange que je n'arrive pas à démêler.

    Tout d'abord pour poser la situation, il faut dire que je n'y connais rien en Base SQL et que j'ai cherché différentes solution qui n'ont pas fonctionné (voire ont aggravé le problème :-° )

    J'ai besoin de faire un moteur de recherche pour mon site, et celui-ci doit être insensible à la casse et aux accents. Facile me direz-vous, on choisi un interclassement adapté et le tour est joué. C'est là que ça commence à me poser soucis notamment parce que j'ai mal codé les choses au départ.

    Sur ma page php j'ai cette ligne :
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    


    Mais dans phpmyadmin, ma base de données est en latin1_swedish_ci (enfin celle de mon site, parce que ma base de test, à force de tentatives diverses et variées est en un peu tout et n'importe quoi :p ). Donc déjà ça ne peut pas coller...

    Il en résulte que si sur mon site l'affichage est normal (je rempli la BDD avec une page du site), dans ma BDD ça ressemble plutôt à ça :

    Citation

    C'était pendant la nuit du 8, novembre 397, au moyen âge on montrait encore, près de la collégiale, ...


    Et du coup impossible de faire des recherches insensibles aux accents là dessus.

    Je comprend bien que dans la base, les données sont formatées en utf8 et que la lecture se fait en latin1.... :euh:
    Ma question est donc la suivante : AU SECOURS !!! Comment je peux faire pour tout remettre d'aplomb ? :D

    J'aimerais tout convertir dans un jeux de caractères et interclassement insensible casse/accents.

    Merci beaucoup par avance pour vos lumières
    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2010 à 0:49:25

      Tout doit être au même encodage (dans ce cas-ci, UTF-8). L'affichage de ta page HTML (balise meta), ton IDE (Netbeans, Eclipse...) ou éditeur de texte (Notepad++...), ta base de données (colonnes textes donc) et la connexion à ta base de données.

      Visiblement, tu réussis à écrire correctement tes chaînes de caractères, mais tu n'utilises pas le bon encodage pour les lire. Vérifie donc ces points et ça devrait mieux allé.
      • Partager sur Facebook
      • Partager sur Twitter
        14 septembre 2010 à 21:11:01

        Ma balise meta est à priori bien en utf8, la connexion à la BDD ne spécifie pas d'encodage (je vais regarder mais je pense que l'ajout d'une ligne genre SET NAMES UTF8 devrait faire l'affaire).

        Au départ j'avais latin1_swedish_ci dans ma structure PhpMyadmin. J'ai changé l'interclassement d'un des champs pour y mettre utf8_general_ci, mais l'affichage reste le même du type : A une époque indéterminée

        Peut être m'y suis-je mal pris...

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          15 septembre 2010 à 8:16:28

          Si ta donnée n'a pas été insérée en UTF-8, le fait de changer l'encodage de ta bdd, table ou colonne, ne va pas modifier la donnée.

          Je sais pas si c'est très clair ce que je dis, alors je vais prendre un exemple :
          • ouvre Notepad++,
          • vérifie que l'encodage est en ANSI (par exemple),
          • saisie éèêë,
          • modifie l'encodage pour UTF-8 (sans faire convertir).

          Ca devrait affiché des caractère bizarres. Ton fichier est en UTF-8, mais les caractères sont toujours en ANSI.
          • Partager sur Facebook
          • Partager sur Twitter
            16 septembre 2010 à 20:45:52

            Il s'agissait bien d'un problème d'enregistrement puisque l'ajout d'une commande
            mysql_query("SET NAMES 'utf8'");
            
            a réglé le problème pour les nouveaux enregistrement.

            J'ai également utilisé la fonction ALTER pour modifier l'interclassement.

            Reste les anciens enregistrements... Y a t'il une solution plus simple que de faire un code qui lirait les données et les réenregistrerait proprement ?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              16 septembre 2010 à 23:38:18

              Regarde du côté de la fonction CONVERT().
              • Partager sur Facebook
              • Partager sur Twitter

              [SQL] Jeux de caractères, interclassement et conversion

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown