2017-06-28 1 views
0

verwenden Ich musste kürzlich mysql von latin-1 zu utf-8 geändert werden, um russische Zeichen zu behandeln. Sie zeigten sich ursprünglich als ?????.Wann, welche Kodierung für die Tabellen

Ich musste auch ein paar Tabellen in meiner Datenbank zu utf8mb4 ändern. Ich hatte ursprünglich diese auf utf8 gesetzt, aber das hatte nicht genug Bits, um bestimmte Zeichen zu behandeln.

Ich muss eine Produktionsdatenbank ändern und sicherstellen, dass ich einige Monate in Folge keine Probleme mit einem bestimmten Codierungstyp habe.

Also meine Frage ist wann verwende ich welche Kodierung auf einer Tabelle?

+1

Meinung basiert: Ich verwende im Allgemeinen 'utf8mb4' und' utf8mb4_unicode_520_ci'. Dies ergibt eine verbesserte Sortierung. –

+0

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

+0

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. –

Antwort

-1

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.

Verwandte Themen