… ou pas.
Pour mettre ses tables en UTF8 avec Doctrine et le framewok Symfony, rien de plus simple.
Tout en haut de votre(vos) schema.yml, ajoutez les lignes suivantes:
options: collate: utf8_unicode_ci charset: utf8
Malheureusement, les fichiers schema.yml des plugins ne seront pas affecté car il faut que ce bout de code soit répété en haut de chaque schema.yml.
Heureusement, [MA]Pascal m'a donné une astuce de sioux qui permet de résoudre ce problème. Il suffit d'utiliser l'héritage des tables dans Doctrine. Par exemple, voici ce que ca donnerait pour le plugin sfDoctrineGuardPlugin:
sfGuardGroupUtf8:
inheritance: { extends: sfGuardGroup, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardGroupPermissionUtf8:
inheritance: { extends: sfGuardGroupPermission, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardPermissionUtf8:
inheritance: { extends: sfGuardPermission, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardRememberKeyUtf8:
inheritance: { extends: sfGuardRememberKey, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardUserUtf8:
inheritance: { extends: sfGuardUser, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardUserGroupUtf8:
inheritance: { extends: sfGuardUserGroup, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
sfGuardUserPermissionUtf8:
inheritance: { extends: sfGuardUserPermission, type: simple }
options: { collate: utf8_unicode_ci, charset: utf8 }
[MA]Pascal me disait même qu'il étendait les fonctionnalités des plugins de cette façon, mais je ne sais pas dans quelle mesure on peut étendre une classe d'un plugin et espérer que cela fonctionne encore...
[MA]Pascal, si tu passes par là et si tu veux bien nous expliquer :p
Nil
16 août 2009 à 18h58
Sympa comme astuce ! Tu peux aller voir aussi http://blog.samuel-trocme.fr qui donne des tips aussi ! Je viens de rajouter ton flux dans mes RSS :)
Quiche
4 mars 2010 à 17h07
une autre façon de faire, dans le fichier de conf my.cnf de mysql ajouter les lignes suivante après [mysqld]
default-character-set=utf8
default-collation=utf8_unicode_ci
character_set_server=utf8
collation_server=utf8_unicode_ci
default-storage-engine=INNODB
du coup, toutes les bases et tables créées sans spécification du CHARACTER SET, COLLATE et ENGINE seront en
DEFAULT CHARACTER SET utf8
COLLATE utf8_unicode_ci
ENGINE = INNODB
mikeplavo
20 mai 2010 à 11h16
Voici la solution que j’utilise et qui fonctionne:
Rajouter dans le fichier config/ProjectConfiguration.class.php le code suivant:
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setCollate(‘utf8_unicode_ci’);
$manager->setCharset(‘utf8′);
}
et hop, tout fonctionne.
Renaud
20 mai 2010 à 12h30
Merci beaucoup mikeplavo pour cette astuce !
Je m’en servirais la prochaine fois :)