2012-03-15 3 views
1

J'ai une base de données qui stocke les noms d'utilisateur, les mots de passe et les informations de base. L''info' ne stocke cependant que les caractères anglais. Comment stocker des données dans différentes langues, disons anglais, français, russe, chinois, japonais, arabe, etc.? J'ai réalisé que le classement par défaut ne supporte pas cela.Comment gérer les requêtes MySQL multilingues?

Quelle est la meilleure solution, et comment vous en sortez-vous?

+1

utf-8 ---------- –

+0

J'ai essayé, obtenant toujours des caractères étranges pour les langues autres que l'anglais. Est-ce que vous définissez simplement la collation pour ce champ particulier, ou y a-t-il d'autres choses à faire? – NoobDev4iPhone

+0

Il y a plus. Voir par exemple http://stackoverflow.com/questions/8544312/getting-html-entities-for-all-major-currencies/8544381#8544381 pour une liste –

Répondre

1

Modifier le classement par défaut de l'ensemble de la base de données et des tables en utf8_general_ci. Il n'y a aucune raison de souffrir (avec ce genre de données de forme libre).

ALTER DATABASE db CHARACTER SET utf8 COLLATE utf8_general_ci; 
ALTER TABLE tbl CONVERT TO utf8 
ALTER TABLE tbl CHARACTER SET utf8 COLLATE utf8_general_ci; 

Lisez à propos de quelques gotchas à la fin de this page.

+1

Contrairement à la croyance populaire, le * collation * n'a rien à voir avec le * encodage *! – deceze

+1

En MySQL, le classement est très lié à l'encodage. La définition de 'COLLATE utf8_something' implique' CHARACTER SET utf8'. Dans tous les cas, pour pouvoir gérer les données stockées dans ces colonnes UTF-8, vous devez vous assurer que votre application parle d'UTF-8 via la connexion à MySQL, avec SET NAMES 'utf8' ou, si disponible, une meilleure bibliothèque. des interfaces spécifiques (par exemple 'mysql_set_charset' de PHP ou l'argument de constructeur' charset' de python-mysql). – bobince