Bonjour,
J'ai une base "ma_base" sous mysql 3.23, avec un jeu de caractère en latin1.
La base contient une seule table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 table1 IDtable1 mediumint(9) Quantité mediumint(9) Unité char(10)
Je veux transférer cette base vers un autre serveur sous mysql 5.5.
Je tiens à conserver le même jeu de caractère (latin1), et le nouveau mysql a été configuré pour ça.
J'ai recréé ma base sur le nouveau mysql :
(je vous passe l'attribution des droits sur cette base)
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE DATABASE ma_base DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
J'ai fait un dump de l'ancienne base depuis le nouveau mysql avec la commande
Quand j'essaye de réintégrer ce dump dans mysql5, ça m'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part mysqldump.exe -h [IP_serveur_ancienne_base] -u[login] -p[mot_passe] --allow-keywords --default-character-set=latin1 -f --no-tablespaces ma_base > C:\dump_mabase.sql
Apparemment le problème vient des noms des colonnes qui sont accentués.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR 1300 (HY000): Invalid utf8 character string: 'Quantit\x82'
En ouvrant le dump créé, j'ai remarqué que mysql rajoute des instructions conditionnelles qui ont l'air de forcer le character_set à UTF8, alors que je le veux en latin1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 DROP TABLE IF EXISTS `table1`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `table1` ( `IDtable1` mediumint(9) NOT NULL auto_increment, `Quantité` mediumint(9) default NULL, `Unité` char(10) default NULL, PRIMARY KEY (`IDtable1`), UNIQUE KEY `Table1_IDtable1_NDX` (`IDtable1`) ) ENGINE=MyISAM; /*!40101 SET character_set_client = @saved_cs_client */;
Si je supprime ces instructions du dump, l'importation dans la nouvelle base se déroule sans problème.
1è question : est-ce que vous savez si on peut faire quelque chose pour empêcher mysql de rajouter ces instructions sur les character-set dans les dump ?
Ensuite, si je modifie le dump en supprimant les "SET character_set_client = utf8" et que je l'importe dans la nouvelle base, puis que j'essaye de recréer un fichier dump depuis cette base, le fichier dump créé pose problème sur les noms des colonnes accentués :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 DROP TABLE IF EXISTS `table1`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `table1` ( `IDtable1` mediumint(9) NOT NULL AUTO_INCREMENT, `QuantitÔÇÜ` mediumint(9) DEFAULT NULL, `UnitÔÇÜ` char(10) DEFAULT NULL, PRIMARY KEY (`IDtable1`), UNIQUE KEY `Table1_IDtable1_NDX` (`IDtable1`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */;
Question2 : j'ai l'impression d'avoir un sacré problème au niveau des jeux de caractères, et je me demande si j'ai configuré mysql correctement pour avoir ma base en latin1... Est-ce que vous savez ce qui pourrait clocher ?
La seule chose que je ne pourrai pas faire c'est changer le nom de mes colonnes accentuées.
Désolé pour le pavé et merci d'avance de votre aide![]()
Partager