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.
@HousememBdr Ich habe das getan und nichts geändert. – panda
Bitte geben Sie als weitere Details, wie konvertieren Sie mit json? Oder etwas anderes? –
@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