Bei der Verbindung mit einer Datenbank mithilfe der MySQLI -Erweiterung von PHP müssen häufig der angeschlossene Zeichensatz festgelegt werden, um die richtigen Lesen und Schreiben der Daten sicherzustellen. Normalerweise verwenden wir $ MySQLI-> set_charset ('utf8'), um den Zeichensatz festzulegen. Manchmal begegnen Sie jedoch auf einen Fehler nach dem Aufrufen von set_charset , wodurch das Programm nicht normal ausgeführt wird. Was genau ist das Problem? In diesem Artikel wird die Gründe für den Fehler bei der Festlegung von MySQLI :: set_charset in Kombination mit gemeinsamen Szenarien analysiert und Ideen für Fehlerbehebung bereitstellen.
Bei dem Aufrufen von $ mySQLI-> set_charset ('utf8') trat ein Fehler auf.
WARNUNG: Mysqli :: set_charset (): Fehler
Fehlgeschlagen Charset festlegen
Müllzeichen oder Dateninsertionsausnahme
Die meisten dieser Fehler beziehen sich auf Nichtübereinstimmung in den Charakter -Set -Einstellungen.
Die Zeichensatzeinstellungen auf der Datenbankseite sind nicht einheitlich
Der Zeichensatz der Datenbank- oder Datentabelle steht im Widerspruch zu dem Zeichensatz der Verbindungseinstellungen.
Beispielsweise ist der Standardzeichensatz der Datenbank latein1 und das Programm ist auf UTF8 eingestellt. Die Nichtübereinstimmung zwischen den beiden kann einen Fehler verursachen.
MySQL -Version oder Treiberbeschränkungen
Ältere Versionen von MySQL unterstützen bestimmte Charakter -Sets nur begrenzt.
Beim Einstellen des Zeichensatzes wird ein Fehler gemeldet, wenn der angegebene Zeichensatz nicht vorhanden ist oder nicht unterstützt wird.
Zeichensatzname Fehler
Der in set_charset übergebene Zeichensatzsatz muss strikt mit dem von MySQL unterstützten Namen übereinstimmen.
Beispielsweise macht die Verwendung von UTF-8 einen Fehler, der richtige ist UTF8 .
Die Verbindung ist nicht erfolgreich oder wurde geschlossen
Wenn das $ mySQLI -Objekt nicht erfolgreich mit der Datenbank hergestellt wird, fällt auch das Aufrufen von set_charset fehl.
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
Stellen Sie sicher, dass die Verbindung keine Ausnahmen von der Verbindung gibt, bevor Sie den Zeichensatz fortsetzen.
Abfrage MySQL-unterstützte Zeichensätze mit dem folgenden SQL:
$result = $mysqli->query("SHOW CHARACTER SET");
while ($row = $result->fetch_assoc()) {
echo $row['Charset'] . "\n";
}
Bestätigen Sie, ob der Zeichensatz, den Sie festlegen möchten, wie UTF8 existiert.
Achten Sie beim Festlegen von Zeichensätzen auf Fallempfindlichkeit und Namenspezifikationen:
if (!$mysqli->set_charset('utf8')) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
echo "Current character set: " . $mysqli->character_set_name();
}
Verwenden Sie keine Saiten wie UTF-8 .
Überprüfen Sie nach dem Anmelden bei MySQL die Zeichensätze der Datenbank und Tabellen:
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
Wenn Sie inkonsistent sind, sollten Sie den Zeichensatz der Datenbank oder Tabelle ändern, um Konflikte zu vermeiden.
Manchmal können Sie den Zeichensatz direkt angeben, wenn Sie eine Verbindung herstellen, um das Aufrufen von set_charset zu vermeiden:
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
$mysqli->query("SET NAMES 'utf8'");
Es wird jedoch empfohlen, zuerst set_charset zu verwenden, da es sicherer ist als festgelegte Namen .
Mysqli :: set_charset Einstellungsfehler hauptsächlich aufgrund von inkompatiblen Zeichensätzen oder falschen Namen. Stellen Sie bei der Fehlerbehebung sicher:
Die Datenbankverbindung ist erfolgreich
Das verwendete Zeichensatz ist korrekt und unterstützt
Die Zeichensätze von Datenbanken und Tabellen stimmen mit den verketteten Zeichensätzen überein
Durch die Überprüfung der obigen Schritte nach dem anderen kann das Problem der Fehler beim Einstellen des Zeichensatzes normalerweise gelöst werden, um sicherzustellen, dass die Zeichenkodierung der Datenübertragung zwischen PHP und MySQL korrekt ist.