MySQL: Zeichencodierung, die von SELECT INTO verwendet wird?

Ich versuche zu exportieren, einige Daten aus einer MySQL-Datenbank, aber seltsamen und wunderbaren Dinge, die passiert sind in unicode in die Tabelle.

Werde ich den Fokus auf einen Charakter, der linken smartquote: “

Wenn ich SELECT von der Konsole, es wird gedruckt, ohne Frage:

mysql> SELECT text FROM posts;
+-------+
| text  |
+-------+
| foo |
+-------+

Das bedeutet, die Daten werden an meinem terminal als utf-8[0] (das ist korrekt).

Jedoch, wenn ich SELECT * FROM posts INTO OUTFILE '/tmp/x.csv' …; die Ausgabe-Datei ist nicht richtig codiert:

$ cat /tmp/x.csv
“fooâ€

Insbesondere die kodiert ist, mit sieben (7!) bytes: \xc3\xa2\xe2\x82\xac\xc5\x93.

Welche Kodierung ist das? Oder wie könnte ich sagen, MySQL auf ein weniger unvernünftig Codierung?

Auch einige verschiedene Fakten:

  • SELECT @@character_set_database zurück latin1
  • Die text Spalte ist ein VARCHAR(42):

    mysql> DESCRIBE posts;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | text  | varchar(42) | NO   | MUL |         |       |
    +-------+-------------+------+-----+---------+-------+
    

     

  • als utf-8 kodiert Erträge \xe2\x80\x9c
  • \xe2\x80\x9c entschlüsselt latin1 dann neu codiert utf-8 Erträge \xc3\xa2\xc2\x80\xc2\x9c (6 bytes).
  • Ein weiterer Datenpunkt: (utf-8: \xe2\x80\xa6) kodiert \xc3\xa2\xe2\x82\xac\xc2\xa6

[0]: wie intelligente Anführungszeichen nicht enthalten sind in einem 8-bit-Codierung, und mein terminal korrekt rendert utf-8-Zeichen.

Kommentar zu dem Problem
Warum verwenden Sie diese, anstatt einen mysqldump?! Kommentarautor: OMG Ponies
Ich verwendet SELECT, weil ich wollte, um filter-und join die Daten ein wenig, bevor Sie exportieren. Ich könnte wahrscheinlich Weg, ohne, dass, obwohl... Da einige Daten wäre besser als ganz kaputt Daten. Kommentarautor: David Wolever
Sie könnte Klonen Sie die Datenbank, und stellen Sie die erforderlichen updates auf der Klon, um Ihren gewünschten export. Kommentarautor: OMG Ponies
Das funktionieren würde... Aber an diesem Punkt, ich denke, ich werde einfach schreiben Sie ein kleines Python-Skript zu tun, den dump für mich. Kommentarautor: David Wolever
Ich Frage mich, warum wir in der Regel umgeben Sie das problem, statt es zu lösen. Kommentarautor: Rodrigo

InformationsquelleAutor der Frage David Wolever | 2012-03-19

Schreibe einen Kommentar