get_charset
Erfahren Sie, wie mysqli_get_charset() in PHP den Zeichensatz einer MySQL-Verbindung zurückgibt und wie Sie Kodierungsprobleme damit beheben.
Die Funktion mysqli_get_charset() gibt den Zeichensatz zurück, den PHP für eine bestimmte MySQL-Verbindung verwendet – zum Beispiel utf8mb4, latin1 oder utf8. Der aktive Zeichensatz ist wichtig, weil er bestimmt, wie Text zwischen PHP und MySQL kodiert wird: Ein falscher Zeichensatz verwandelt Buchstaben mit Akzent, Emoji und nicht-lateinische Schriften in unlesbares „Mojibake" und ist eine klassische Ursache für ?-Zeichen in gespeicherten Daten.
Dieser Artikel erklärt, was die Funktion zurückgibt, wie alle Felder des Ergebnisses gelesen werden und wann ein Aufruf sinnvoll ist.
Syntax
mysqli_get_charset(mysqli $mysql): ?objectIm objektorientierten Stil steht dieselbe Funktion als Methode $mysqli->get_charset() zur Verfügung.
$mysql— eine Verbindung, die vonmysqli_connect()zurückgegeben wurde.- Rückgabewert — ein
stdClass-object, das den Zeichensatz der Verbindung beschreibt, odernull, wenn der Zeichensatz nicht ermittelt werden konnte.
Inhalt des zurückgegebenen object
Im Gegensatz zu Funktionen, die einen einfachen string zurückgeben, gibt mysqli_get_charset() ein object mit mehreren Feldern zurück. Die nützlichsten sind:
| Eigenschaft | Bedeutung |
|---|---|
charset | Der Name des Zeichensatzes, z. B. utf8mb4. |
collation | Die Kollation, z. B. utf8mb4_general_ci. |
dir | Verzeichnis des Zeichensatzes (bei modernen Builds oft leer). |
min_length | Minimale Anzahl von Bytes pro Zeichen. |
max_length | Maximale Anzahl von Bytes pro Zeichen (4 für utf8mb4). |
number | Interne MySQL-Zeichensatz-ID. |
state | Interne Zeichensatz-Status-Flags. |
Grundlegende Verwendung
Rufen Sie die Funktion auf einer gültigen Verbindung auf und lesen Sie die Eigenschaft charset:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$charset = mysqli_get_charset($mysqli);
printf("Character set: %s\n", $charset->charset); // e.g. utf8mb4
printf("Collation: %s\n", $charset->collation); // e.g. utf8mb4_general_ci
mysqli_close($mysqli);
?>Mit mysqli_connect() wird die Verbindung hergestellt, ein Verbindungsfehler geprüft und anschließend werden die Felder charset und collation des zurückgegebenen object ausgelesen.
Objektorientierter Stil
Wenn Sie die OOP-mysqli-API bevorzugen, verwenden Sie die Methode get_charset():
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
$charset = $mysqli->get_charset();
echo "Charset: {$charset->charset}\n";
echo "Max bytes: {$charset->max_length}\n"; // 4 for utf8mb4
$mysqli->close();
?>Wann würde ich das verwenden?
- Kodierungsfehler debuggen. Wenn gespeicherter Text als
?oder verstümmelte Symbole erscheint, ist die Überprüfung des Verbindungs-Zeichensatzes der erste Diagnoseschritt. - Überprüfen, ob ein
set_charset()-Aufruf wirksam war. Nach dem Aufruf vonmysqli_set_charset()können Sie den Zeichensatz erneut auslesen, um sicherzustellen, dass die Änderung übernommen wurde. - Verzweigung basierend auf der Byte-Breite. Das Lesen von
max_lengthgibt an, ob die Verbindung 4-Byte-Zeichen wie Emoji (utf8mb4) oder nur bis zu 3 Bytes (utf8) speichern kann.
Nur den Namen abrufen
Wenn Sie nur den Namen des Zeichensatzes und nicht das vollständige object benötigen, gibt mysqli_character_set_name() ihn direkt als string zurück:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
echo $mysqli->character_set_name(); // e.g. utf8mb4
$mysqli->close();
?>Häufige Fallstricke
- Nicht mit der MySQL-Variable
character_set_clientverwechseln. Diese Funktion gibt den Zeichensatz zurück, den PHP zur Kommunikation mit dem Server verwendet; sie ändert nicht, wie Spalten Daten speichern – das wird durch die Tabellen-/Spaltendefinition festgelegt. - Den Zeichensatz explizit setzen. Sich auf den Server-Standard zu verlassen, ist über verschiedene Hosts hinweg fehleranfällig. Rufen Sie direkt nach dem Verbinden
mysqli_set_charset($mysqli, "utf8mb4")auf; danach solltemysqli_get_charset()utf8mb4melden. - Zugriff auf Eigenschaften bei
null. Wenn die Verbindung fehlgeschlagen ist, kann die Funktionnullzurückgeben; der Zugriff auf->charsetbeinullerzeugt eine Warnung. Prüfen Sie daher immer zuerst die Verbindung.
Fazit
mysqli_get_charset() gibt ein object zurück, das den Zeichensatz einer MySQLi-Verbindung beschreibt – seinen Namen, die Kollation und die Byte-Grenzen. Verwenden Sie es zur Diagnose von Kodierungsproblemen und um zu bestätigen, dass mysqli_set_charset() wie erwartet angewendet wurde. Wenn Sie nur den Namen benötigen, greifen Sie auf mysqli_character_set_name() zurück.