2016-10-18 4 views
0

Dies ist eine häufige Frage wurde oft gefragt. Allerdings kann ich immer noch nicht die richtige Antwort von Google bekommen.Convert MySql Daten von Latin1 zu UTF8

In meiner Web App gibt es ein Formular zum Sammeln von Daten, die App und alle Daten werden in UTF-8 gesammelt. Die Auflistung des Schemas und der Tabelle wurde fälschlicherweise jedoch als latin1 festgelegt. Außerdem wurde während der Verbindung "SET NAMES UTF8" verwendet.

Jetzt zeigen einige der Daten in Chinesisch immer als Fragezeichen (?), Egal welche Konvertierungsmethode ich verwende. Query-Problemspalten als binär zeigen auch an, dass die Daten mehrere Bytes von 3f sind, was mehrere "?" Bedeutet.

Wenn meine Daten noch in utf-8 konvertiert werden können und korrekt angezeigt werden oder bereits verloren sind?

[UPDATE]

Dies ist nicht die gleiche Frage mit How to convert an entire MySQL database characterset and collation to UTF-8?, weil ich die gesamten Datenbank nicht nur konvertieren getan und Tabelle in UTF-8, sondern auch mysqldump und Re-Import in die Datenbank. Keine von ihnen funktioniert jedoch.

[UPDATE 2]

Das Problem ist nicht nur über Tabelle charset Umwandlung aber auch UTF-8 müssen verstehen, Latin-Codiersystem.

Grundwissen ist:

Latein Verwendung nur 1 Byte, das 8 Bits zum Speichern.

UTF-8 Verwendung dynamisches Speichersystem, welche Mittel kann nicht nur 1 Byte

Da UTF-8-Codierung System wenigstens 1 Bit zur Identifikation benötigt, die nur 7 Bits Mittel könnte zum Speichern von Vergleich mit lateinischem verwendet werden. Wenn Zeichen also nur 7 Bits zum Speichern benötigen, können sie erfolgreich in Latein mit UTF-8-Darstellung gespeichert werden. Wenn Daten jedoch 7 Bits überschreiten, wird es unterbrochen.

So, Chinesisch und Japanisch, benötigt es 2 bis 3 Bytes für die Speicherung, die die Daten während des Speicherns beschädigen wird, da das erste Byte in UTF-8-Darstellung bereits den Bereich, den Latin speichern kann, überschreiten.

Deshalb, egal wie ich den Zeichensatz sowohl der Datenbank als auch der Tabelle ändere, zeigt es immer noch "?", Denn im Lateinischen wird jedes Zeichen außerhalb des Bereichs in '?' Angezeigt, 3F in HEX.

+0

@HousememBdr Ich habe das getan und nichts geändert. – panda

+0

Bitte geben Sie als weitere Details, wie konvertieren Sie mit json? Oder etwas anderes? –

+0

@HousememBdr Ein UTF8 Chinese verwendet 3 Bytes zum Speichern, wie '們' in \ xE5 \ x80 \ x91. Nach dem Speichern in einer Latin1-Tabelle wird es "?". Also verwende ich alter table, um die Tabellensammlung von latin1 in utf8 zu ändern, sie wird immer noch in '?' Angezeigt. Bei Verwendung von "Convert" (Spalte mit Binärcode) wird weiterhin "?" Angezeigt. Es scheint, dass die letzten 2 Bytes während des Speichervorgangs gelöscht wurden. – panda

Antwort

0

Juste den Zeichensatz der gesamten Datenbank ändern:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

Und natürlich können Sie es für einige Tisch tun.

Further more have a look at the documentation here.

EDIT: "?"

anderen Fall, wenn Sie Daten bereits sotred in Marken, die Realität ist, dass es beschädigt ist.

+0

Ich habe Datenbank und Tabelle geändert, aber es ändert nichts. – panda

Verwandte Themen