Sie haben mehrere Fragen.
Das "???" wahrscheinlich von einer falschen Konvertierung von latin1 zu utf8. Die Daten sind jetzt verloren, da nur '?' Überreste. SELECT HEX(...) ...
zu bestätigen, dass alles, was Sie bekommen, ist 3F
(?
), wo Sie etwas Nützliches bekommen sollten.
Siehe "Fragezeichen" in Trouble with utf8 characters; what I see is not what I stored.
utf8mb4
und utf8
Handle Kyrillisch (Russisch) identisch, so dass die CHARACTER SET
ist nicht das Problem in Bezug auf die "???".
Wenn Sie eine Originalkopie der Daten haben, dann wollen Sie wahrscheinlich das 3. Element in here - "Zeichensatz latin1, aber haben utf8 Bytes darin; lassen Sie Bytes in der gleichen Zeit beim Fixieren von Zeichensatz". Das nenne ich die zweistufige ALTER
.
Wie zur Vermeidung zukünftiger Probleme ... Siehe "Best Practice" in meinem ersten Link. Wenn Sie nur europäische (einschließlich Russisch) benötigen, reicht entweder utf8 oder utf8mb4 aus. Aber wenn Sie Emoji oder alle Chinesen wollen, dann gehen Sie mit utf8mb4.
Beachten Sie auch, dass Sie angeben müssen, welcher Zeichensatz der Client verwendet. Das ist eine häufige Unterlassung und war wahrscheinlich ein Teil dessen, was Sie überhaupt in Schwierigkeiten gebracht hat.
Meinung basiert: Ich verwende im Allgemeinen 'utf8mb4' und' utf8mb4_unicode_520_ci'. Dies ergibt eine verbesserte Sortierung. –
Nur ein Zeichensatz gilt für alle Daten, die zu einem beliebigen Zeitpunkt in mysql gespeichert sind. Daher ist die as-Frage fraglich. Die Antwort auf das, was einfach ist: Verwenden Sie den Zeichensatz, der alle Zeichen enthält, die Sie in Ihrer Anwendung verwenden müssen. – Shadow
ich stimme zu, aber ich musste fragen. Ich glaube, das Problem bestand darin, jede Tabelle in der Datenbank in diese Codierung zu ändern, d. h. Probleme mit vorhandenen Daten und Ausgaben. –