W3docs

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): ?object

Im objektorientierten Stil steht dieselbe Funktion als Methode $mysqli->get_charset() zur Verfügung.

  • $mysql — eine Verbindung, die von mysqli_connect() zurückgegeben wurde.
  • Rückgabewert — ein stdClass-object, das den Zeichensatz der Verbindung beschreibt, oder null, 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:

EigenschaftBedeutung
charsetDer Name des Zeichensatzes, z. B. utf8mb4.
collationDie Kollation, z. B. utf8mb4_general_ci.
dirVerzeichnis des Zeichensatzes (bei modernen Builds oft leer).
min_lengthMinimale Anzahl von Bytes pro Zeichen.
max_lengthMaximale Anzahl von Bytes pro Zeichen (4 für utf8mb4).
numberInterne MySQL-Zeichensatz-ID.
stateInterne 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 von mysqli_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_length gibt 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_client verwechseln. 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 sollte mysqli_get_charset() utf8mb4 melden.
  • Zugriff auf Eigenschaften bei null. Wenn die Verbindung fehlgeschlagen ist, kann die Funktion null zurückgeben; der Zugriff auf ->charset bei null erzeugt 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.

Übungen

Übung
Was macht die Funktion " `mb_internal_encoding()` in PHP?
Was macht die Funktion " `mb_internal_encoding()` in PHP?
Was this page helpful?