(en local) j’ai tenté une approche utf8mb4 sur seenthis, et je suis parvenu à la recette suivante, qui a fonctionné mais me paraît un peu complexe…
# Comment utiliser utf8mb4
avec SPIP
background :
►https://mathiasbynens.be/notes/mysql-utf8mb4
►http://seenthis.net/messages/350136
Voici une liste d’opérations qui semble fonctionner chez moi (en local) :
0. Vérifier
– que le contenu est en utf8 (dans l’espace privé de SPIP) ;
– que les tables sont bien en utf8 (dans le dump mysql)
– que MySQL est en version > 5.5.3
1. Exporter la base sous deux fichiers, d’un côté la structure, de l’autre, les données (dans notre exemple, on travaille sur la base seenthis
) :
mysqldump --opt --no-data seenthis > seenthis_structure.sql
mysqldump --opt --no-create-info seenthis > seenthis_contents.sql
cet export est notre backup ; en cas de souci, le réimporter tel quel
2. Réimporter la structure, en prenant soin de remplacer utf8
par utf8mb4
, et de remplacer 255 par 249 (car une clé primaire doit obligatoirement faire moins de 1000 octets) :
cat seenthis_structure.sql | perl -pi -e's/utf8/utf8mb4/g;' | perl -pi -e's/\(255/(249/g;' | mysql seenthis
3. Réimporter les données :
cat seenthis_contents.sql | mysql seenthis
les données étant déjà en utf8 elles se chargent telles quelles
3. Indiquer à SPIP qu’il doit se connecter à MySQL en invoquant SET NAMES utf8mb4
:
echo "update spip_meta set valeur='utf8mb4' where nom='charset_sql_connexion'" | mysql seenthis
je ne sais pas encore s’il faut éditer
– charset_collation_sql_base
(valeur : utf8_general_ci
)
– charset_sql_base
(valeur : utf8
)
4. tester
5. Si on utilise mysql en ligne de commande, l’invoquer avec
mysql --default-character-set=utf8mb4
ou ajouter ceci dans .my.conf
:
default-character-set=utf8mb4
Remarque importante : il faut absolument traiter toutes les tables.