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

Administration MySQL Discussion :

Modification du charset d'une base de donnée


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut Modification du charset d'une base de donnée
    Bonjour,

    J'ai une base de donnée avec un charset UTF8 que je voudrais changer en latin1. Une première aide m'indique que je pourrais utiliser mysaldump en exportant ma base avec le charset latin1, de la façon suivante :

    C:\EasyPHP5.2.10\mysql\bin>mysqldump -u bibli -pXXXX --default-character-set=latin1 bibli > bibli.sql

    Mais le fichier résultat que j'obtiens définit encore les tables avec :
    ENGINE=MyISAM DEFAULT CHARSET=utf8;

    Pourriez-vous m'indiquer ce qui ne va pas dans ma commande mysqldump sinon m'indiquer une autre méthode ?

    Bien sincèrement.
    Patrick

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    La requête permettant de changer le charset ne te convient pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE taTable CHARACTER SET = latin1 ;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Je ne savais pas qu'il existait une telle commande... Toutefois j'ai 231 tables à transformer dans ma base et les traiter une par une ne m'enchante pas vraiment Mais la première question qui se pose est : La commande ne fait elle que changer le paramétrage de la table en basculant le charset de ENGINE de utf8 à latin1 ou alors est-ce qu'elle transforme également le codage du texte dans les champs de la table ? A voir ce qui suit on peut douter d'une transformation de l'encodage des données :

    En effet, j'ai appliqué la commande sur une table de ma base. La commande a été exécutée avec succès, pour autant je peux voir dans phpmyadmin un champ 'text' dans la structure de ma base qui est encore en interclassement utf8_general_ci. A quoi correspond l'interclassement ? Voilà ci-dessous la table telle qu'elle apparait maintenant lors d'un export. On voit bien le mélange latin1 sur la table et utf8 sur le champ commentaire (text) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- Structure de la table `abo_liste_lecture`
    --
     
    CREATE TABLE IF NOT EXISTS `abo_liste_lecture` (
      `num_empr` int(8) unsigned NOT NULL DEFAULT '0',
      `num_liste` int(8) unsigned NOT NULL DEFAULT '0',
      `etat` int(1) unsigned NOT NULL DEFAULT '0',
      `commentaire` text CHARACTER SET utf8 NOT NULL,
      PRIMARY KEY (`num_empr`,`num_liste`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Ne faut-il donc pas aussi changer le charset au niveau de la base de donnée elle même ? Sinon peut être qu'il existerait une autre commande pour modifier l'interclassement au niveau de chaque table, sinon au niveau de la base de donnée dans son ensemble ?

    Merci pour votre aide.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Je ne sais pas répondre à tes questions.
    Toutefois ces requètes pourraient t'aider.

    Pour récupérez le nom de tes tables qui ne sont pas en latin1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA="TA_BASE" AND TABLE_COLLATION not like "latin1%"
    Pour récupérez le nom de tes colonnes qui sont en utf8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="TA_BASE" AND CHARACTER_SET_NAME="utf8"
    Pour modifier une colonne (Il faut faire la requête en fonction de COLUMN_DEFAULT et IS_NULLABLE) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE taTable CHANGE COLUMN `taColonne` `taColonne` TEXT CHARACTER SET 'latin1' NOT NULL  ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Ma base contient 321 tables pour 660 champs texte ! Je ne peux pas les traiter un par un. Soit je trouve une commande pour faire du traitement par lot sur l'ensemble des tables et des champs texte, soit je trouve une commande pour traiter la base dans son ensemble. L'idée de l'export/Import était plus intéressante, je reviens à ma première question : pourquoi la commande suivante ne marche t-elle pas ?

    C:\EasyPHP5.2.10\mysql\bin>mysqldump -u bibli -pXXXX --default-character-set=latin1 bibli > bibli.sql

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Par défaut
    Il me semble que l'option --default-character-set n'a pas d'influence sur les tables existantes de la base de données.

    Ce que tu peux faire c'est modifier ton fichier bibli.sql avec un éditeur de texte (s'il n'est pas trop gros) ou en ligne de commande pour remplacer toutes les occurences de utf8 par latin1

    Peut-être devrais-tu mettre latin1 comme charset par défaut de ta base de données.

    Thomas

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/07/2010, 08h07
  2. [VB.net 2003] Annuler les dernieres modifications d'une base de donnée
    Par winny107 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/10/2006, 07h05
  3. [SQL] Modification de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/06/2006, 16h55
  4. Modification d'une base de donnée
    Par scorpion37 dans le forum C++Builder
    Réponses: 70
    Dernier message: 16/06/2006, 09h08
  5. Modifer le chemin PATH d'accès à une base de donnée
    Par tipiweb dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/04/2005, 16h04

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