Question

J'ai fini avec codages de caractères foiré dans l'une de nos colonnes de MySQL.

En général je

√ © au lieu de é
√∂ au lieu de ö
√ ≠ au lieu de í

et ainsi de suite ...

Assez certain que quelqu'un ici sache ce qui est arrivé et comment résoudre.

Mise à jour: Sur la base de la réponse de bobince et depuis que j'avais ces données dans un fichier que j'ai fait ce qui suit

#!/user/bin/env python
import codecs
f = codecs.open('./file.csv', 'r', 'utf-8')
f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
for line in f:
    f2.write(line.encode('macroman').decode('utf-8')),

après quoi

load data infile 'file-fixed.csv' 
into table list1 
fields terminated by ',' 
optionally enclosed by '"' 
ignore 1 lines;

correctement importé les données.

MAJ2: Hammerite, juste pour être complet ici sont les informations demandées ...

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     | 
| character_set_connection | latin1                     | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | latin1                     | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

Le SHOW CREATE TABLE pour la table, je suis importateur pour DEFAULT CHARSET=utf8 a

EDIT3:

En fait, avec les paramètres au-dessus du load n'a pas faire la bonne chose (je ne pouvais pas comparer aux champs UTF8 existants et mes données chargées uniquement regardé comme si elle était correctement chargé, je suppose en raison des mal, mais assortis client, connexion et résultats charsets), donc je mis à jour les paramètres:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

données téléchargées à nouveau et puis finalement je suis arrivé correctement les données chargées (comparables aux données existantes).

Était-ce utile?

La solution

Votre texte a été codé en UTF-8, puis re-décodé, par erreur, comme Mac Roman .

Vous ne serez pas en mesure de résoudre ce problème dans la base de données, comme MySQL ne connaît pas l'encodage romain Mac. Vous pouvez écrire un script pour marcher chaque ligne de chaque table affectée et corriger le texte en inversant le cycle de codage / décodage. Python est une possibilité, d'avoir une bonne gamme de codages:

>>> print u'é'.encode('macroman').decode('utf-8')
é
>>> print u'ö'.encode('macroman').decode('utf-8')
ö
>>> print u'í'.encode('macroman').decode('utf-8')
í

Par ailleurs, s'il n'y a pas de contenu non-ASCII qui n'est pas affecté par ce problème, vous pouvez essayer d'utiliser mysqladmin pour exporter une sauvegarde SQL, puis le convertir en une seule fois, soit en utilisant un script comme ci-dessus ou, si vous avez un éditeur de texte (probablement sur le Mac) qui peut le faire, le chargement du script comme UTF-8 de l'enregistrer puis comme Mac Roman. Enfin réimportation la décharge en utilisant mysql < dump.sql.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top