<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commentaires sur : Mysql, Propel et l&#8217;UTF8 sont dans un bateau</title>
	<atom:link href="http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/</link>
	<description>Astuces et bons plans d&#039;un web developpeur</description>
	<lastBuildDate>Thu, 02 Feb 2012 14:22:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Par : Tim</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1798</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Thu, 27 Aug 2009 17:20:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1798</guid>
		<description>Hello Benjamin,

Je suis effectivement tombé sur cette possibilité récemment! Ca fonctionne dans doctrine, mais je n&#039;avais pas pu tester pour propel.

C&#039;est chose fait donc! Encore un billet à mettre à jour.

Merci en tout cas!</description>
		<content:encoded><![CDATA[<p>Hello Benjamin,</p>
<p>Je suis effectivement tombé sur cette possibilité récemment! Ca fonctionne dans doctrine, mais je n&#8217;avais pas pu tester pour propel.</p>
<p>C&#8217;est chose fait donc! Encore un billet à mettre à jour.</p>
<p>Merci en tout cas!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Benjam1</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1796</link>
		<dc:creator>Benjam1</dc:creator>
		<pubDate>Thu, 27 Aug 2009 16:06:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1796</guid>
		<description>3 mois après ... :)

J&#039;ai eu aujourd&#039;hui moi aussi le même problème, autant dire que les japonnais qui devaient remplir le site qu&#039;on développe s&#039;arrachaient les cheveux!


Et j&#039;ai trouvé la solution:
dans le schema.yml il faut rajouter au début:
options:
  type: INNODB
  collate: utf8_unicode_ci
  charset: utf8 

et le tour est joué :)

C&#039;est tout de même bizarre que malgré les configurations (database.yml, propel.ini ...) ça ne se fasse pas par défaut!</description>
		<content:encoded><![CDATA[<p>3 mois après &#8230; :)</p>
<p>J&#8217;ai eu aujourd&#8217;hui moi aussi le même problème, autant dire que les japonnais qui devaient remplir le site qu&#8217;on développe s&#8217;arrachaient les cheveux!</p>
<p>Et j&#8217;ai trouvé la solution:<br />
dans le schema.yml il faut rajouter au début:<br />
options:<br />
  type: INNODB<br />
  collate: utf8_unicode_ci<br />
  charset: utf8 </p>
<p>et le tour est joué :)</p>
<p>C&#8217;est tout de même bizarre que malgré les configurations (database.yml, propel.ini &#8230;) ça ne se fasse pas par défaut!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Tim</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1372</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Mon, 25 May 2009 11:13:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1372</guid>
		<description>héhé oui, je me suis dis ça pendant 2ans avant de me lancer ^^</description>
		<content:encoded><![CDATA[<p>héhé oui, je me suis dis ça pendant 2ans avant de me lancer ^^</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Naholyr</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1371</link>
		<dc:creator>Naholyr</dc:creator>
		<pubDate>Mon, 25 May 2009 06:54:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1371</guid>
		<description>Avec grand plaisir c&#039;est évidemment là pour ça :) 
un de ces 4 faudra vraiment que je me fasse un blog :p</description>
		<content:encoded><![CDATA[<p>Avec grand plaisir c&#8217;est évidemment là pour ça :)<br />
un de ces 4 faudra vraiment que je me fasse un blog :p</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Tim</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1360</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Sat, 23 May 2009 13:27:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1360</guid>
		<description>@goulwen Merci bien! Ca mériterait d&#039;être adapté en task 1.2 et mis dans un plugin. Ca me parait très utile!

@naholyr Grand merci pour ces explications, j&#039;avoue que personnellement c&#039;est le genre de truc qui m&#039;intéresse beaucoup mois, du coup je suis tjrs content que des devs plus sages se risque à des explications claires ;)

Tu permets que j&#039;étaye mon billet avec les informations supplémentaires que tu as apportées?</description>
		<content:encoded><![CDATA[<p>@goulwen Merci bien! Ca mériterait d&#8217;être adapté en task 1.2 et mis dans un plugin. Ca me parait très utile!</p>
<p>@naholyr Grand merci pour ces explications, j&#8217;avoue que personnellement c&#8217;est le genre de truc qui m&#8217;intéresse beaucoup mois, du coup je suis tjrs content que des devs plus sages se risque à des explications claires ;)</p>
<p>Tu permets que j&#8217;étaye mon billet avec les informations supplémentaires que tu as apportées?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : naholyr</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1359</link>
		<dc:creator>naholyr</dc:creator>
		<pubDate>Sat, 23 May 2009 11:33:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1359</guid>
		<description>Comme je travaille toujours en UTF-8 je crée mes bases avec ce COLLATE et ça marche très bien. C&#039;est la solution que tu as fini par trouver.

Il est important de noter en revanche que le collate du client de connexion (l&#039;option &quot;encoding&quot; dans le databases.yml) est très très important lui aussi, car quelle que soit sa valeur on n&#039;aura pas de problème apparent, sauf le jour où on change de système parce que le collate du client par défaut est défini au niveau du système, et il vaut donc mieux ne pas compter dessus (beaucoup de Windows le laisseront en latin1, beaucoup de Linux le passeront en utf8).

Si on a tout en utf8 (base, tables, page, chaines dans le code), mais que le client est en latin1, voici ce qui se produit lors d&#039;un insert :
1. construction de la requête : chaine en utf8 (&quot;été&quot; = 5 octets)
2. le client reçoit la donnée, et l&#039;envoie dans les tables : il est en latin1 et le champ cible est en utf8, donc il convertit.
3. Dans le champ de la table, on a &quot;Ã©tÃ©&quot; en utf8 (soit 9 octets).
Et voici ce qui se produit lorsqu&#039;on récupère la donnée :
1. le client lit le champ de la table &quot;Ã©tÃ©&quot; (utf8, 9 octets).
2. il est en latin1, et le champ était en utf8, donc il convertit en &quot;été&quot; (utf8, 5 octets).
3. on reçoit la bonne chaine en utf8.

Du coup tout s&#039;est passé de manière transparente, tout semble fonctionner correctement sauf que :
  - le jour où le système change d&#039;encodage c&#039;est la merde (à la rigueur on respécifiera &quot;latin1&quot; à ce moment là, mais avant de comprendre pourquoi en mettant &quot;utf8&quot; ça ne corrige rien on va tourner un moment ;))
  - le jour où on fait un restore de la base en ligne de commande, ça va foirer (parce que l&#039;encoding par défaut du client se base sur l&#039;encoding du shell courant, en général utf8).
  - on a dans la base des chaines trop grosses puisqu&#039;encodées une fois de trop en utf8.

Voilà, je profitais de cet article pour parler de ce problème souvent latent et insoupçonné, mais pourtant présent ;) Perso j&#039;ai du corriger tous mes sites (pas que ceux en Symfony) car ils avaient tous ce problème vu que je ne spécifiais jamais l&#039;encoding client.


Ah du coup, il faut aussi parler des solutions :
  - Dans Symfony, spécifier &quot;encoding: utf8&quot; dans les options du databases.yml.
  - Dans les autres cas, la première requête après la connexion doit être &quot;SET NAMES UTF8&quot;.
Une fois ceci fait, on doit observer que toutes les chaines du site ont sauté. Si ce n&#039;est pas le cas c&#039;est que l&#039;encoding client par défaut était déjà utf8 : tant mieux :)
Sinon, il faut faire un export de la base avec un client en encoding &quot;latin1&quot; (on récupèrera alors les chaines en utf8 correct), puis faire une restauration avec un client en encoding &quot;utf8&quot; :
$ mysqldump -u user -p --encoding=latin1 ma_base &gt; dump.sql
$ mysql -u user -p --encoding=utf8 ma_base &lt; dump.sql</description>
		<content:encoded><![CDATA[<p>Comme je travaille toujours en UTF-8 je crée mes bases avec ce COLLATE et ça marche très bien. C&#8217;est la solution que tu as fini par trouver.</p>
<p>Il est important de noter en revanche que le collate du client de connexion (l&#8217;option &laquo;&nbsp;encoding&nbsp;&raquo; dans le databases.yml) est très très important lui aussi, car quelle que soit sa valeur on n&#8217;aura pas de problème apparent, sauf le jour où on change de système parce que le collate du client par défaut est défini au niveau du système, et il vaut donc mieux ne pas compter dessus (beaucoup de Windows le laisseront en latin1, beaucoup de Linux le passeront en utf8).</p>
<p>Si on a tout en utf8 (base, tables, page, chaines dans le code), mais que le client est en latin1, voici ce qui se produit lors d&#8217;un insert :<br />
1. construction de la requête : chaine en utf8 (&laquo;&nbsp;été&nbsp;&raquo; = 5 octets)<br />
2. le client reçoit la donnée, et l&#8217;envoie dans les tables : il est en latin1 et le champ cible est en utf8, donc il convertit.<br />
3. Dans le champ de la table, on a &laquo;&nbsp;Ã©tÃ©&nbsp;&raquo; en utf8 (soit 9 octets).<br />
Et voici ce qui se produit lorsqu&#8217;on récupère la donnée :<br />
1. le client lit le champ de la table &laquo;&nbsp;Ã©tÃ©&nbsp;&raquo; (utf8, 9 octets).<br />
2. il est en latin1, et le champ était en utf8, donc il convertit en &laquo;&nbsp;été&nbsp;&raquo; (utf8, 5 octets).<br />
3. on reçoit la bonne chaine en utf8.</p>
<p>Du coup tout s&#8217;est passé de manière transparente, tout semble fonctionner correctement sauf que :<br />
  &#8211; le jour où le système change d&#8217;encodage c&#8217;est la merde (à la rigueur on respécifiera &laquo;&nbsp;latin1&#8243; à ce moment là, mais avant de comprendre pourquoi en mettant &laquo;&nbsp;utf8&#8243; ça ne corrige rien on va tourner un moment ;))<br />
  &#8211; le jour où on fait un restore de la base en ligne de commande, ça va foirer (parce que l&#8217;encoding par défaut du client se base sur l&#8217;encoding du shell courant, en général utf8).<br />
  &#8211; on a dans la base des chaines trop grosses puisqu&#8217;encodées une fois de trop en utf8.</p>
<p>Voilà, je profitais de cet article pour parler de ce problème souvent latent et insoupçonné, mais pourtant présent ;) Perso j&#8217;ai du corriger tous mes sites (pas que ceux en Symfony) car ils avaient tous ce problème vu que je ne spécifiais jamais l&#8217;encoding client.</p>
<p>Ah du coup, il faut aussi parler des solutions :<br />
  &#8211; Dans Symfony, spécifier &laquo;&nbsp;encoding: utf8&#8243; dans les options du databases.yml.<br />
  &#8211; Dans les autres cas, la première requête après la connexion doit être &laquo;&nbsp;SET NAMES UTF8&#8243;.<br />
Une fois ceci fait, on doit observer que toutes les chaines du site ont sauté. Si ce n&#8217;est pas le cas c&#8217;est que l&#8217;encoding client par défaut était déjà utf8 : tant mieux :)<br />
Sinon, il faut faire un export de la base avec un client en encoding &laquo;&nbsp;latin1&#8243; (on récupèrera alors les chaines en utf8 correct), puis faire une restauration avec un client en encoding &laquo;&nbsp;utf8&#8243; :<br />
$ mysqldump -u user -p &#8211;encoding=latin1 ma_base &gt; dump.sql<br />
$ mysql -u user -p &#8211;encoding=utf8 ma_base &lt; dump.sql</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : goulwen</title>
		<link>http://www.amicalement-web.net/mysql-propel-utf8/2009/05/21/comment-page-1/#comment-1353</link>
		<dc:creator>goulwen</dc:creator>
		<pubDate>Fri, 22 May 2009 19:33:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.amicalement-web.net/?p=254#comment-1353</guid>
		<description>Nous avons rencontré le même problème avec sf1.0.x

En fait par défaut MySQL est en latin1 et du coup, nous avons une base en Latin1 avec des données en UTF8 dedans. Bref un beau bazard car dès que l&#039;on a besoin d&#039;accéder aux données autrement que par symfony, on a des problèmes.

J&#039;ai finis par faire un batch qui converti les champs en latin en utf8 [1].

Je le donne au cas où:

http://fr.pastebin.ca/1431312</description>
		<content:encoded><![CDATA[<p>Nous avons rencontré le même problème avec sf1.0.x</p>
<p>En fait par défaut MySQL est en latin1 et du coup, nous avons une base en Latin1 avec des données en UTF8 dedans. Bref un beau bazard car dès que l&#8217;on a besoin d&#8217;accéder aux données autrement que par symfony, on a des problèmes.</p>
<p>J&#8217;ai finis par faire un batch qui converti les champs en latin en utf8 [1].</p>
<p>Je le donne au cas où:</p>
<p><a  href="http://fr.pastebin.ca/1431312" rel="nofollow">http://fr.pastebin.ca/1431312</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
