MySQL-Zeichenkodierung und Emoji-Speicherung
Wir haben eine iPhone-Anwendung, die Emoticons an ein PHP-Backend überträgt, das sie dann in MySQL einfügt Datenbank. Nach erfolgreicher Einfügung erscheint der gespeicherte Wert jedoch leer.
Nur-Text-Einfügungen sind erfolgreich, aber wenn Emoticons enthalten sind, wird nur der Text eingefügt. Vorschläge, den Feldtyp in „Blog“ zu ändern (um Bilddaten aufzunehmen), erwiesen sich aufgrund gelegentlicher Nicht-Emoticons-Einfügungen und geringem Speicherbedarf als ungeeignet.
Lösung: MySQL-Zeichensatzkompatibilität
Das Problem liegt in der Zeichenkodierung von MySQL. iOS-Emojis verwenden hauptsächlich Codepunkte, die über die Basic Multilingual Plane (BMP) der Unicode-Tabelle hinausgehen. Beispielsweise befindet sich das Emoji „Lächelndes Gesicht mit offenem Mund und lächelnden Augen“ unter U 1F604.
MySQL-Versionen vor 5.5 unterstützen nur UTF-8 für BMP, wodurch die Speicherung auf Zeichen unter U FFFF beschränkt ist. Folglich kann MySQL das U 1F604-Emoji oder andere „hohe Zeichen“ nicht speichern.
Um dieses Problem zu lösen, verwenden Sie MySQL 5.5 und wählen Sie utf8mb4 (authentisches UTF-8), utf16 oder utf32 als Spaltenzeichensatz. Stellen Sie außerdem sicher, dass die MySQL-Verbindung zwischen PHP und der Datenbank denselben Zeichensatz verwendet.
Verwenden Sie für MySQL-Versionen vor 5.5 den Spaltentyp BLOB, der Rohbytes ohne Berücksichtigung von „Zeichen“ speichert. Dies ermöglicht zwar die Speicherung von Emojis, beeinträchtigt jedoch die Effizienz der Textsuche und Indizierung.
Das obige ist der detaillierte Inhalt vonWarum verschwinden meine Emojis in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!