Frage

Ich habe mit verkorksten Zeichencodierungen in einem unseren mysql Spalten gelandet ist.

Normalerweise habe ich

v © statt é
v? statt ö
v ? statt í

und so weiter ...

Ziemlich sicher, dass jemand hier würde wissen, was passiert ist und wie sie zu beheben.

UPDATE: Basierend auf Antwort des bobince und da ich diese Daten in einer Datei hatte ich habe folgende

#!/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')),

nach der

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

die Daten korrekt importiert.

UPDATE2: Hammerite, nur für hier Vollständigkeit sind die angeforderten Details ...

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/ | 
+--------------------------+----------------------------+

Die SHOW CREATE TABLE für die Tabelle I am Import hat DEFAULT CHARSET=utf8

EDIT3:

Eigentlich mit den oben genannten Einstellungen der load haben nicht , das Richtige tun (ich konnte nicht an bestehenden utf8 Felder vergleichen und meine geladenen Daten nur sieht , als wäre es korrekt geladen; ich nehme an, weil das falsch, aber passendes Client, den Anschluss und Ergebnisse charsets), so dass ich die Einstellungen aktualisiert:

+--------------------------+----------------------------+
| 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/ | 
+--------------------------+----------------------------+

Daten wieder hochgeladen und dann schließlich bekam ich die Daten korrekt geladen (vergleichbar mit vorhandenen Daten).

War es hilfreich?

Lösung

Ihr Text wurde in UTF-8 codiert und dann wieder decodiert wird, fälschlicherweise als Mac Roman .

Sie werden diese nicht in der Datenbank in der Lage zu beheben, wie MySQL nicht den Mac Roman Codierung wissen. Sie können ein Skript schreiben, um jede Zeile jeder betroffenen Tabelle zu gehen und den Text durch Umkehrung der Encoder / Decoder-Zyklus zu reparieren. Python ist eine Möglichkeit, eine gute Auswahl an Codierungen mit:

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

Alternativ, wenn es keine Nicht-ASCII-Inhalte, die von diesem Problem nicht betroffen ist, könnten Sie versuchen mysqladmin mit einem SQL-Dump zu exportieren, dann wandelt sie alle auf einmal, entweder mit einem Skript wie oben oder, falls Sie eine haben Texteditor (vermutlich auf dem Mac), die es tun können, um das Skript als UTF-8 Laden dann als Mac Roman zu speichern. Schließlich Re-Import der Dump mit mysql < dump.sql.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top