Forum: Rails France Encodage dans mysql

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-29 17:16
(Received via mailing list)
Bonjour,

J'ai quelque fois ce problème dans mon application et je souhaitais
avoir votre avis dessus ...

ActiveRecord::StatementInvalid: Mysql::Error: Illegal mix of
collations (latin1_swedish_ci,IMPLICIT) and
(utf8_general_ci,COERCIBLE) for operation '=': SELECT * FROM `items`
WHERE (`items`.`title` = 'Station Karlovy lázn?' AND `items`.`lat` =
50.085249 AN...

Existe-t-il des parades pour ce genre de problèmes ?
Mon database.yml précise l'encodage en utf8.

production:
  adapter: mysql
  encoding: utf8


Je vous remercie par avance,
Pierre
2fd0206c71a1b22a9cc6293f38537461?d=identicon&s=25 Cyril Mougel (shingara)
on 2009-01-29 17:17
(Received via mailing list)
Pierre Valade wrote:
>
> Existe-t-il des parades pour ce genre de problèmes ?
> Mon database.yml précise l'encodage en utf8.
>
Mais ta base est-elle vraiment en UTF-8 car justement ca laisserai
penser l'inverse. comme du latin1_sweedish qui est un des encodage par
défaut avec PHPMyAdmin je crois :)

--
Cyril Mougel
http://blog.shingara.fr
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-29 17:39
(Received via mailing list)
Cyril : cela veut-il dire que la base peut-être configurée en autre
chose
que utf8 ?Comment peut-on voir cela ?
La seule chose que j'ai faite depuis le début, c'est

mysql > CREATE DATABASE ...

et ensuite, tout a été fait à partir de Rails, avec database.yml qui
précise
encodage: utf8

Mais, la base peut être dans un encodage différent ? En fonction de la
configuration de mysql sur le serveur ?

2009/1/29 Cyril Mougel <cyril.mougel@gmail.com>
2fd0206c71a1b22a9cc6293f38537461?d=identicon&s=25 Cyril Mougel (shingara)
on 2009-01-29 17:48
(Received via mailing list)
Pierre Valade wrote:
> Mais, la base peut être dans un encodage différent ? En fonction de la
> configuration de mysql sur le serveur ?
Tout à fait. L'UTF-8 n'est pas par défaut sur les Base de donnée. Par
exemple il faut créer la base de donnée PostgreSQL avec l'option -E
UNICODE :

createdb -E UNICODE 'yahoo'

Je ne connais pas mysql donc je ne sais pas comment changer l'encodage
et même si c'est possible. Ensuite pour créer tes BDD tu aurais pu
utiliser la tâche rake :

rake db:create

qui aurait peut-être créé en UTF-8. Je ne sais pas.

Le fichier database.yml ne fait que dire que la BDD est en UTF-8. Cela
ne certifie pas que ca soit le cas vu que c'est externe à Rails. Ca
envoi juste les DATA en UTF-8.


--
Cyril Mougel
http://blog.shingara.fr
603047efae3b7b158019fb1228a3b2d0?d=identicon&s=25 Renaud Chaput (Guest)
on 2009-01-29 17:51
(Received via mailing list)
Oui, tout dépend des réglages par défaut de ton MySQL. Généralement
c'est latin1_swedish_ci, ce qui pourrait expliquer ton problème.
Tu peux voir la collation d'une table avec cette requête :
show full columns from <table>;

Normallement, ça devrait être en UTF8 :)

Pour régler le problème, tu peux créer ta DB avec la tache rake qui va
bien (rake db:create), elle mettra la bonne collation.

Pour info, si dans le database.yml tu spécifies que la DB "est" en UTF8,
cela veut juste dire que le charset de la connexion sera en UTF8, et que
les nouvelles tables/bases créées par rails le seront.

renchap

Pierre Valade a écrit :
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-29 18:17
(Received via mailing list)
Merci pour vos réponses.
Mes colonnes mysql sont effectivement en latin1_swedish_ci alors j'ai
tout
crée avec Rails et un encodage utf8.

J'ai entendu dire qu'il fallait mieux avoir de utf8 si on souhaite avoir
une
base de données qui puisse avoir des données de tous les pays. Google
semble
utiliser utf8 pour les appels vers ses API. Est-ce que cela veut-il dire
que
Facebook utilise de l'utf8 pour stocker des caractères dans n'importe
quel
pays du monde ?

Est-ce que tout cela est vrai ?
Est-ce que je peux encore changer l'encodage de ma base pour passer en
utf8
?

Merci !
Pierre

2009/1/29 Renaud Chaput <renchap@cocoa-x.com>
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-29 18:18
(Received via mailing list)
"Mes colonnes mysql sont effectivement en latin1_swedish_ci alors j'ai
tout
crée avec Rails et un encodage utf8."
Précision : sauf la base de données au départ. Seules les tables ont été
crées avec Rails.

2009/1/29 Pierre Valade <pierre.valade@gmail.com>
603047efae3b7b158019fb1228a3b2d0?d=identicon&s=25 Renaud Chaput (Guest)
on 2009-01-29 18:25
(Received via mailing list)
A priori, tu peux faire :
ALTER TABLE <table> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
ALTER DATABASE <db> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Il est possible qu'il fasse modifier aussi au niveau des champs, je ne
suis plus sur.

Pour l'UTF-8, c'est un encodage de caractères qui permet de représenter
a peu près tous les caractères qui existent, y compris le Japonais, le
Chinois, et tous les autres alphabets.
Si tu veux faire une application internationalle (et dans les autres cas
aussi d'ailleurs), il vaut mieux choisir cet encodage dès le début, afin
de ne pas avoir à se retrouver à faire des conversions dans tous les sens.
Tu peux avoir plus d'informations sur l'UTF-8 ici :
http://fr.wikipedia.org/wiki/UTF8

renchap

Pierre Valade a écrit :
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-30 01:02
(Received via mailing list)
Merci beaucoup pour tes précisions Renaud.Après avoir néanmoins pas mal
cherché pour trouver une solution qui marche, j'ai trouvé la migration
suivante :

http://pastie.org/374738

qui marche parfaitement

merci, bonne soirée !

2009/1/29 Renaud Chaput <renchap@cocoa-x.com>
This topic is locked and can not be replied to.