Start · Sprachen · PHP · Referenz · mysqli_get_charset

mysqli_get_charset

Funktion

Gibt ein Objekt zurück, das Informationen über den aktuell gesetzten Zeichensatz der MySQL-Verbindung enthält.

seit PHP 5.1.0 Kategorie: db

Signatur

mysqli_get_charset(mysqli $mysql): object|null

Beschreibung

mysqli_get_charset() liefert ein Objekt mit detaillierten Metadaten zum aktuell aktiven Zeichensatz einer mysqli-Datenbankverbindung. Das zurückgegebene Objekt enthält unter anderem den Zeichensatznamen, die Kollation, den Kommentar sowie die minimale und maximale Anzahl an Bytes pro Zeichen.

Die Funktion ist besonders nützlich, wenn Sie sicherstellen möchten, dass eine Verbindung den erwarteten Zeichensatz verwendet – etwa nach einem Aufruf von mysqli_set_charset(). So können Sie prüfen, ob der gewünschte Zeichensatz (z. B. utf8mb4) tatsächlich aktiv ist, bevor Sie Benutzerdaten in die Datenbank schreiben oder auslesen.

Das zurückgegebene Objekt besitzt folgende Eigenschaften: charset (Zeichensatzname), collation (Kollationsname), dir (Verzeichnis der Zeichensatzdatei, meist leer), min_length (minimale Bytelänge), max_length (maximale Bytelänge), number (interne Nummer), state (Status).

Als objektorientierte Variante steht $mysqli->get_charset() zur Verfügung. Beide Varianten liefern dasselbe Ergebnis.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Ein aktives mysqli-Verbindungsobjekt, wie es von mysqli_connect() oder new mysqli() zurückgegeben wird.

Rückgabewert

Typ
object|null
Beschreibung
Gibt ein Objekt mit Zeichensatz-Informationen zurück. Schlägt der Aufruf fehl (z. B. bei einer ungültigen Verbindung), wird null zurückgegeben.

Beispiele

Aktuellen Zeichensatz einer Verbindung auslesen

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

if ($mysqli->connect_errno) {
    die('Verbindungsfehler: ' . $mysqli->connect_error);
}

$charset = mysqli_get_charset($mysqli);

if ($charset !== null) {
    echo 'Zeichensatz:  ' . $charset->charset   . PHP_EOL;
    echo 'Kollation:    ' . $charset->collation  . PHP_EOL;
    echo 'Min. Bytes:   ' . $charset->min_length . PHP_EOL;
    echo 'Max. Bytes:   ' . $charset->max_length . PHP_EOL;
} else {
    echo 'Konnte den Zeichensatz nicht ermitteln.';
}

$mysqli->close();
Zeichensatz: utf8mb4 Kollation: utf8mb4_0900_ai_ci Min. Bytes: 1 Max. Bytes: 4

Zeichensatz setzen und anschließend verifizieren

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

if ($mysqli->connect_errno) {
    die('Verbindungsfehler: ' . $mysqli->connect_error);
}

// Gewünschten Zeichensatz setzen
$mysqli->set_charset('utf8mb4');

// Prüfen, ob der Zeichensatz korrekt gesetzt wurde
$charset = $mysqli->get_charset();

if ($charset !== null && $charset->charset === 'utf8mb4') {
    echo 'utf8mb4 ist korrekt aktiv. Kollation: ' . $charset->collation;
} else {
    echo 'Achtung: Unerwarteter Zeichensatz aktiv: ' . ($charset->charset ?? 'unbekannt');
}

$mysqli->close();
utf8mb4 ist korrekt aktiv. Kollation: utf8mb4_0900_ai_ci

// Wichtig · Fallstricke

Sicherheitshinweis: Stellen Sie immer sicher, dass die Verbindung den Zeichensatz utf8mb4 verwendet, bevor Sie Nutzerdaten in die Datenbank schreiben. Ein falsch gesetzter Zeichensatz kann in seltenen Randfällen dazu beitragen, dass Sicherheitsmechanismen wie mysqli_real_escape_string() umgangen werden. Verwenden Sie stets mysqli_set_charset() (nicht SET NAMES via Query) und verifizieren Sie das Ergebnis mit mysqli_get_charset().

Die Eigenschaft dir des zurückgegebenen Objekts ist bei modernen MySQL/MariaDB-Versionen in der Regel ein leerer String, da Zeichensatz-Definitionen intern gespeichert werden.