W3docs

character_set_name

Erfahren Sie mehr über die Funktion mysqli_character_set_name() in PHP zum Abrufen des Zeichensatznamens einer MySQL-Verbindung.

Die Funktion mysqli_character_set_name() gibt den Standard-Zeichensatz zurück, der für die aktuelle MySQLi-Verbindung verwendet wird — zum Beispiel utf8mb4, utf8 oder latin1. Diese Seite erklärt, was die Funktion zurückgibt, ihre Syntax in beiden Stilen, wann man sie einsetzt und welche Kodierungsprobleme sie aufdecken hilft.

Was der Zeichensatz steuert

Der Verbindungszeichensatz teilt MySQL mit, wie die gesendeten Bytes interpretiert werden sollen (in INSERT/UPDATE-Anweisungen und Abfrageparametern) und wie die zurückgesendeten Bytes kodiert werden. Stimmt der Verbindungszeichensatz nicht mit der tatsächlichen Kodierung der Zeichenketten überein, entsteht Mojibake — korrumpierte Akzentbuchstaben, Emojis werden zu ????, und stille Datenverluste.

mysqli_character_set_name() ist der schnellste Weg, diese Einstellung zur Laufzeit zu prüfen. Es handelt sich um eine schreibgeschützte Diagnose: Sie ändert nichts. Um den Zeichensatz zu ändern, verwendet man set_charset().

Syntax

Die Funktion hat eine objektorientierte und eine prozedurale Form. Beide sind gleichwertig — wählen Sie diejenige, die zu Ihrem Code passt.

// Object-oriented style
string $mysqli->character_set_name()

// Procedural style
string mysqli_character_set_name(mysqli $mysqli)
  • Parameter (nur prozedural): $mysqli — eine Verbindung, die von mysqli_connect() oder new mysqli() zurückgegeben wird.
  • Rückgabewert: ein string, der den aktuellen Zeichensatznamen enthält (z. B. "utf8mb4"). Es wird nicht false zurückgegeben; bei einer gültigen Verbindung gibt es immer einen Zeichensatz.

So verwenden Sie mysqli_character_set_name()

Rufen Sie die Funktion auf einer offenen Verbindung auf und geben Sie das Ergebnis aus:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

echo "Character set: " . $mysqli->character_set_name();

$mysqli->close();
?>

Eine typische Ausgabe, bevor Sie etwas explizit festgelegt haben, ist der Standard des Servers:

Character set: utf8mb4

Dasselbe im prozeduralen Stil:

<?php
$mysqli = mysqli_connect("localhost", "your_username", "your_password", "database");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
}

echo "Character set: " . mysqli_character_set_name($mysqli);

mysqli_close($mysqli);
?>

Zeichensatz nach einer Änderung auslesen

Da die Funktion die aktuelle Einstellung meldet, eignet sie sich gut, um zu bestätigen, dass ein Aufruf von set_charset() tatsächlich wirksam war:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

echo "Before: " . $mysqli->character_set_name() . "\n";

$mysqli->set_charset("utf8mb4");
echo "After:  " . $mysqli->character_set_name() . "\n";

$mysqli->close();
?>
Before: latin1
After:  utf8mb4

Warum Sie den Zeichensatz setzen und nicht nur auslesen sollten

mysqli_character_set_name() meldet nur den Zeichensatz — er kann ihn nicht korrigieren. Für vollständige Unicode-Unterstützung (einschließlich Emojis und vieler CJK-Zeichen) setzen Sie utf8mb4 direkt nach dem Verbindungsaufbau:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

$mysqli->set_charset("utf8mb4");
$mysqli->query("INSERT INTO users (name, email) VALUES ('Jörg 🚀', '[email protected]')");

$mysqli->close();
?>

Hinweise und Fallstricke:

  • Bevorzugen Sie utf8mb4 gegenüber utf8. MySQL's veraltetes utf8 ist ein 3-Byte-Alias, der 4-Byte-Zeichen wie Emojis nicht speichern kann. utf8mb4 ist das echte, vollständige UTF-8.
  • Ändern Sie den Zeichensatz nicht mit SET NAMES ... als Abfrage. Das aktualisiert zwar die serverseitige Sitzung, lässt die Client-Bibliothek aber unwissend, was real_escape_string() beschädigt. Verwenden Sie immer set_charset(), damit beide synchron bleiben.
  • Der zurückgegebene Name ist der Zeichensatz der Verbindung, der unabhängig vom im Schema definierten Zeichensatz einer Spalte oder Tabelle ist.

Verwandte Funktionen

Fazit

mysqli_character_set_name() ist eine kleine, zuverlässige Diagnosefunktion, um zu prüfen, welchen Zeichensatz eine MySQL-Verbindung verwendet. Lesen Sie ihn aus, um Kodierungsprobleme zu debuggen, und beheben Sie sie dann mit set_charset("utf8mb4"), damit Ihre Anwendung Akzentzeichen und Emojis korrekt speichert.

Übungen

Übung
Was gibt mysqli_character_set_name() zurück?
Was gibt mysqli_character_set_name() zurück?
Was this page helpful?