2010-03-14 4 views
0

Dans ma base de données, il y a des zones dans lesquelles les données ne sont pas lisibles. Je sais maintenant pourquoi c'est arrivé mais je ne sais pas comment le réparer.Problèmes d'encodage de caractères dans MySQL

J'ai trouvé un moyen d'obtenir l'information de retour de la base de données:

SELECT id, 
     name 
    FROM projects 
WHERE LENGTH(name) != CHAR_LENGTH(name); 

L'une des lignes retournées montre:

id | name 
------------------------- 
1008 | Cajón el Diablo 

Cela devrait être:

id | name 
------------------------- 
1008 | Cajón el Diablo 

Can Quelqu'un m'aider à comprendre comment résoudre ce problème? Comment puis-je convertir cela en utilisant SQL? SQL n'est-il pas bon? Si non, que diriez-vous de Python?

+0

Quelle est la collation (jeu de caractères) de la colonne 'PROJECTS.name'? Un moyen facile de vérifier est d'exécuter: 'AFFICHER DES COLONNES COMPLETES DE PROJETS COMME 'name' - 'collation' devrait être la 3ème colonne. http://dev.mysql.com/doc/refman/5.1/fr/show-columns.html –

+0

@OMG Poneys: vous voulez dire "jeu de caractères", pas "collation". L'ensemble de caractères définit comment les caractères sont représentés avec des octets, tandis que le classement définit l'ordre de tri des caractères. – Piskvor

+0

Dans la colonne de classement, il affiche 'utf8_bin.' –

Répondre

1

Vos données mySQL sont très probablement codées en UTF-8.

L'outil ou client vous visualisez les données avec est soit

  • Ne pas parler au serveur mySQL en UTF-8 (SET NAMES utf8)

  • émet des caractères UTF-8 dans un environnement a un encodage différent de UTF-8 (par exemple une page Web encodée en ISO-8859-1).

Vous devez spécifier le jeu de caractères correct lors de la connexion à la base de données mySQL ou convertir les caractères entrants afin qu'ils puissent être générés correctement. Pour plus d'informations, vous devez nous indiquer à quel classement se trouvent votre base de données et vos tables et ce que vous utilisez pour consulter les données.

Si vous voulez entrer dans les bases de cela, ce qui est très bonne lecture: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

Merci Pekka. Je pense que le problème est le suivant: l'application à la base de données n'a pas géré correctement les données et les données de la table sont en fait latin1 mais la base de données pense que c'est utf8. –

+0

@Eric aww, ça craint. Je ne pense pas que cela puisse être résolu dans la base de données (sauf bien sûr en exécutant une série d'opérations 'set field = REPLACE (field, '³', 'ó')'.) Avez-vous accès à un langage de script? En PHP, un 'utf8_decode()' ferait l'affaire je pense. –

+0

Je pense que vous avez raison. Donc, je suppose que je vais essayer de trouver un moyen créatif d'obtenir celui-ci. Je peux utiliser Python. Merci Pekka. –

Questions connexes