MySQL, UTF-8 und Emoji-Zeichen
Arbeite ich an einer iOS-app mit PHP+MySQL-backend. Die app hat ein chat-Bereich, die Bedarf an Unterstützung emoji.
Meine Tabellen sind in utf8_unicode_ci. Wenn ich nicht Anruf 'set names utf8' in meinen Skripten emoji-es funktioniert tatsächlich - was auch immer in die Datenbank eingegeben, wird zurückgegeben, um den Kunden, wie es sollte.
Das problem ist, dass dieser (wenn ich es richtig verstanden habe) werden die Sonderzeichen falsch in der Datenbank, und diese Pausen string vergleichen (ie * ist nicht mehr die gleiche wie ich beim vergleichen von Zeichenfolgen).
Allerdings, wenn ich tun, rufen Sie set names utf8, plötzlich die emoji-Zeichen eingefügt werden, als einen Haufen Fragezeichen.
Anregungen, auf die richtige Art und Weise des Umgangs mit diesen? Danke!
InformationsquelleAutor SvenM | 2014-06-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage ist, ob die db hat eine diakritische unempfindlich vergleichen. Die andere Frage, setzt Zeichen, * ausgedrückt werden kann, als entweder ein unicode-Zeichen oder zwei bilden ein ersatzpaar. Gibt es Methoden zur Konvertierung einer Zeichenfolge in eine pre-zusammengesetzt oder zerlegt form: precomposedStringWith* und decomposedStringWith*.
Scheint es, dass MySQL unterstützt zwei Formen der unicode-ucs2 (das ist eine ältere form, die wurde ersetzt durch utf16), die 16-bits pro Zeichen und utf-8 bis zu 3 bytes pro Zeichen. Die schlechte Nachricht ist, dass weder form unterstützen Ebene 1-Zeichen, die verlangen, bei 17 bit. (vor allem emoji). Es sieht aus wie MySQL 5.5.3 und auch die Unterstützung utf8mb4, utf16 und utf32 Unterstützung BMP und Ergänzende Zeichen (Lesen emoji). Sehen MySQL Unicode-Zeichensätze.
Hier ist etwas code, und die Ergebnisse zu zeigen, die verschiedenen unicode-byte-Darstellung.
Unicode ist ein 21-bit-encoding-system.
UTF32 direkt repräsentiert die code-Punkte und zeigt deutlich, zerlegt ersatzzeichenpaare.
UTF8 und UTF16 sind ein oder mehrere bytes zur Darstellung eines unicode-Zeichens.
//Für einige ersatzpaare es gibt keine andere form
NSLog Ausgabe:
Ich habe eine zusätzliche Frage, wenn Sie nichts dagegen haben. Wenn ich nicht brauchen, string-matching, wie ich beschrieben, gibt es andere Nachteile nicht aufrufen set names utf8? Ich weiß die Daten nicht korrekt eingesetzt wird, aber es funktioniert, wenn die Anzeige der Daten in den Mandanten.
Leider weiß ich gar nichts über
set names utf8
es hat schon Jahre her, seit ich schrieb code, um mit MySQL zu arbeiten. Verwenden Sie Ebene 1 code-Punkte für die Prüfung (emoji sind in einer Ebene 1). Auch surrogated-Paare, aber Sie werden wohl nur Fragen für die Vergleiche. Ich habe einige code, und die Ergebnisse, um die Antwort zu zeigen, die verschiedenen unicode-byte-Darstellung.Wollte Euch mitteilen, dass ich MySQL aktualisiert und verändert meinen Charakter sets utf8mb4_unicode_ci - und alles ist gut jetzt. Ich danke Ihnen sehr!
InformationsquelleAutor zaph