Forcer l’UTF-8 sur toutes les tables avec Doctrine
Un petit aide-mémoire pour que toutes les tables d’une base de données soient en UTF-8, la solution la plus courante étant de rajouter ceci en haut de son fichier schema.yml :
options: collate: utf8_unicode_ci charset: utf8
Cela fonctionne très bien… mais si on utilise plusieurs fichiers schema.yml (ou si on utilise un plugin ayant son propre schéma, sfDoctrineGuard par exemple), on se retrouve avec des tables en latin1_swedish_ci mélangées avec d’autres en utf8_unicode_ci, et ça, c’est moche (tout le contraire d’une bonne pratique). Pire encore, l’utilisation d’encodages différents génère l’erreur MySQL “Illegal mix of collations”.
Pour y remédier, il faut forcer Doctrine à utiliser l’UTF-8 partout, en modifiant le fichier /config/ProjectConfiguration.class.php (merci à Damien pour le tip) :
<?php
class ProjectConfiguration extends sfProjectConfiguration
{
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setCollate('utf8_unicode_ci');
$manager->setCharset('utf8');
Doctrine_Migration_Base::setDefaultTableOptions(array(
'type' => 'INNODB',
'charset' => 'utf8',
'collate' => 'utf8_unicode_ci'
));
}
}
18/01/2011 — Mots-clés : MySQL, PHP, symfony — Classé dans Geek
— Ecrire un commentaire