Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Mysqli :: get_charset, um das Problem des Fehlers im Unicode -Emoji -Speicher zu vermeiden

Verwenden Sie Mysqli :: get_charset, um das Problem des Fehlers im Unicode -Emoji -Speicher zu vermeiden

M66 2025-05-23

Beim Speichern von Benutzerninhalten mithilfe von MySQL -Datenbank, insbesondere Textfeldern wie Kommentaren, Spitznamen und Chat -Datensätzen, stoßen wir häufig auf ein Problem: Wenn der Benutzer ein Emoji -Emoticon oder ein spezielles Unicode -Symbol eingreift, wird das Speichern in der Datenbank fehlgeschlagen, oder wenn das Speichern erfolgreich ist, wird es mit dem Aufnehmen von Felgen oder Fragen, bei denen es ausgezeichnet wird, und es wird angezeigt und angezeigt.

Dies liegt daran, dass der Standardzeichen von MySQL-Datenbanken (wie UTF8 ) 4-Byte-Unicode-Zeichen (einschließlich der meisten Emoji) nicht vollständig unterstützt. Um dieses Problem zu lösen, muss der PHP-Code neben der Konfiguration auf Datenbankebene auch sicherstellen, dass der mit dem Client verbundene Zeichensatz korrekt eingestellt ist. In diesem Artikel wird erläutert, wie die Funktion MySQLI :: get_charset verwendet wird, um zu überprüfen, ob das Verbindungszeichenkennzeichen korrekt ist, um das Problem zu lösen, dass Unicode -Emoticons nicht gespeichert werden können.

Problemhintergrund

Die UTF8 -Codierung von Mysql unterstützt tatsächlich nur bis zu 3 Bytes von Zeichen, während Emoji und einige Unicode -Zeichen 4 Bytes benötigen, sodass UTF8MB4 verwendet werden muss. Wenn die Serverseite (Datenbanktabelle, Felder, Verbindung) UTF8MB4 nicht festgelegt wird, werden diese Zeichen entweder nicht einfügen oder abgeschnitten und durch Fragemarken ersetzt.

Normalerweise müssen wir drei Dinge tun:

  1. Der Zeichensatz für die Datenbank und Tabelle ist auf UTF8MB4 gesetzt.

  2. Geben Sie UTF8MB4 an, wenn Sie eine Verbindung zur Datenbank herstellen.

  3. Stellen Sie sicher, dass der im PHP -Code verwendete Zeichensatz korrekt ist.

Überprüfen Sie die Zeichensätze mit MySQLi :: get_charset

Die MySQLI -Klasse von PHP bietet die Get_CharSet -Methode, mit der die Zeichensatzinformationen der aktuellen Verbindung erhalten werden können. Mit dieser Funktion können wir den Code überprüfen, ob die aktuelle Verbindung UTF8MB4 verwendet hat, und ihn anpassen, wenn sie nicht übereinstimmt.

Der Beispielcode lautet wie folgt:

 <?php
// Datenbankverbindungsinformationen
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_errno) {
    die('Verbindung ist fehlgeschlagen: ' . $mysqli->connect_error);
}

// Überprüfen Sie den aktuellen Verbindungszeichensatz
$charsetInfo = $mysqli->get_charset();
echo 'Aktueller Anschlusszeichen festgelegt: ' . $charsetInfo->charset . PHP_EOL;

// Wenn nicht utf8mb4,Dann einstellen auf utf8mb4
if ($charsetInfo->charset !== 'utf8mb4') {
    if (!$mysqli->set_charset('utf8mb4')) {
        die('Versäumte das Set -Zeichensatz: ' . $mysqli->error);
    } else {
        echo 'Der Verbindungszeichen wurde auf festgelegt utf8mb4' . PHP_EOL;
    }
}

// Beispieleinsatz enthält Emoji Daten von
$stmt = $mysqli->prepare('INSERT INTO messages (content) VALUES (?)');
$content = 'prüfen Emoji ?? ??';
$stmt->bind_param('s', $content);

if ($stmt->execute()) {
    echo 'Dateninsertion erfolgreich!' . PHP_EOL;
} else {
    echo 'Einfügen fehlgeschlagen: ' . $stmt->error . PHP_EOL;
}

$stmt->close();
$mysqli->close();
?>

Datenbankkonfigurationsvorschläge

Um Emoji und andere 4-Byte-Zeichen vollständig zu unterstützen, benötigen Sie neben den Einstellungen auf Codeebene auch:

  1. Datenbank-, Tabellen- und Feldzeichensatzeinstellungen:

     ALTER DATABASE your_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  2. Verbindungsparameter: Stellen Sie sicher, dass der Teil der MySQL -Konfigurationsdatei my.cnf enthält:

     character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    

Zusammenfassung

Durch die Verwendung von MySQLI :: get_charset können wir dynamisch prüfen, ob der Verbindungszeichen in unserem Code korrekt ist, und bei Bedarf Korrekturen vornehmen. Kombiniert die korrekte Konfiguration von Datenbanken und Tabellen und kann das Problem, dass Unicode Emoji nicht gespeichert werden kann, vollständig lösen. Auf diese Weise können Benutzer mit Leichtigkeit verschiedene Emojis in Ihrer Anwendung verwenden, ohne sich um Verluste oder verstümmelten Code zu sorgen.