Dump, charset et packets avec mySQL
Suite au transfert d’un de mes domaines vers un nouvel hébergeur, j’ai récupéré la base de données MySQL existante via phpMyAdmin pour la réinjecter sur le nouveau serveur. Or à l’arrivée, je me retrouve avec tous mes caractères spéciaux (accents, cédilles, etc) qui ne sont plus pris en compte:
Calendrier prévisionnel pour 2006 à télécharger
En fait, la base mysql originale était sur un serveur dont le charset était défini en UTF8 alors que le nouveau serveur fonctionne avec le charset latin1. Pour importer la base proprement, il a donc suffit de spécifier à mysql le charset par défaut avec “default-character-set” :
mysql ma_base < mon_fichier.sql --default-character-set=utf8 -u mon_login -p
Autre souci, En observant les logs j’ai remarqué plusieurs erreurs concernant des tailles de paquets qui dépassaient la limite autorisée lors de mon importation :
... Query OK, 1 row affected (0.01 sec) ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.02 sec) Query OK, 1 row affected (0.02 sec) ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes Query OK, 1 row affected (0.01 sec) ...
Cette erreur vient de la taille d’un de mes champs du type LONGBLOB que j’utilise pour y stocker directement des fichiers : les données stockées dépassent pour certaines la limite autorisée par défaut. Un simple changement dans le fichier /etc/my.cnf suffit :
[mysqld] max_allowed_packet=32M
Et hop, tout s’est déroulé à merveille.
Tags: charset, linux, mysql