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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE DATABASE ma_base DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
(je vous passe l'attribution des droits sur cette base)

J'ai fait un dump de l'ancienne base depuis le nouveau mysql avec la commande
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
Quand j'essaye de réintégrer ce dump dans mysql5, ça m'affiche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ERROR 1300 (HY000): Invalid utf8 character string: 'Quantit\x82'
Apparemment le problème vient des noms des colonnes qui sont accentués.

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