Der Mysql 5.6-Client kann keine UTF8-Zeichen anzeigen

Der Mysql 5.6-Client kann keine UTF8-Zeichen anzeigen

Mysql-Datenbanken werden auf AWS RDS Mysql 5.6 gehostet

Auf einer der EC2 Cent OS 6.5-Instanzen hatte ich Mysql Client 5.1. Ich habe ihn verwendet, um SELECT-Abfragen über RDS-Mysql auszuführen. Es gibt eine bestimmte Abfrage, die wir ausführen, um eine CSV-Datei zu generieren. Die Datenbank enthält einige der indischen Sprachen, nämlich Hindi, Marathi und Bengali. Bei Verwendung des Mysql 5.1-Clients wurden diese Sprachtexte korrekt in CSV gespeichert.

Ich habe den Client auf MySQL 5.6.26 aktualisiert (RPMs heruntergeladen von:HIERfür Redhat/Oracle Linux). Jetzt gibt dieselbe Abfrage verstümmelte Zeichen aus.

Ein kurzes Beispiel für den Unterschied in der Ausgabe:
Mysql 5.1-Client:

"365253","121","publish","लेनोवो के3 नोट 4जी स्मार्टफोन आज फ्लैश सेल के लिए उपलब्ध है। हालांकि इस फ्लैश सेल में वहीं उपभोक्ता भाग ले पाएंगे जिन्होंने पहले ही इसके लिए रजिस्ट्रेशन किया हो। लेनोवो के3 नोट एक्सक्लूसिवली ईकाॅमर्स साइट

Mysql 5.6-Client:

"365253","121","publish","लेनोवो का ससà¥<U+008D>ता 4जी फैबलेट के3 नोट आज फà¥<U+008D>लैश के लिà¤<U+008F> होगा उपलबà¥<U+008D>ध""

Ich habe das Zeichen in '.my.cnf' festgelegt.

cat /root/.my.cnf


[client]
user=captain
password=GuruWOWKnowsA11
default-character-set = utf8

Ich habe auch den Zeichensatz für Datenbank/RDS überprüft (zeige Variablen wie „char%“). Es gab einige lateinische Zeichensätze. Ich habe diese auf UTF-8 geändert und das Ergebnis der SELECT-Abfrage erneut getestet – nichts hat sich geändert.
[A] Vor den Parameteränderungen:

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.22.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

[B] Nach Parameteränderungen:

+--------------------------+-------------------------------------------+
| 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       | /rdsdbbin/mysql-5.6.22.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

Was könnte hier das Problem sein? Ist es ein Fehler im Client, Version 5.6?

Antwort1

Ich nehme an, dass Folgendes passiert ist: Sie (oder jemand anderes) haben die Nicht-UTF-8-Datenbank erstellt und die UTF-8-Daten darin eingefügt. Dann haben Sie irgendwie (ich weiß nicht, ob das passiert ist, Sie haben es nicht erwähnt; das ist jedoch nicht so wichtig) Ihre Datenbank auf 5.6 aktualisiert, oder zumindest den MySQL-Client. Der neue Client sieht eindeutig, dass die Datenbankcodierung Latin1 ist, und interpretiert die tatsächlichen UTF-8-Daten falsch (und er hat jedes Recht dazu).

Ich schlage vor, dass Sie die Datenbank mit einem MySQL 5.1-Client sichern. Sie erhalten einen Sicherungskopie mit gültigen UTF-8-Sequenzen. Anschließend erstellen Sie eine Datenbank mit UTF-8-Kodierung und importieren die Daten mit einem neueren Client. Achten Sie auf die set namesAnweisung in Ihrem Sicherungskopie und ändern Sie sie bei Bedarf (auf UTF-8). Beachten Sie auch, dass keine destruktiven Aktionen (wie das Löschen von Datenbanken) ausgeführt werden sollten, es sei denn, Sie sind mit dem Ergebnis absolut zufrieden.

verwandte Informationen