In PHP müssen wir uns häufig mit dem Zeichensatz befassen, wenn Datenbankverbindungen, insbesondere wenn die in der Datenbank gespeicherten Daten nicht-ASCII-Zeichen enthalten, um sicherzustellen, dass der Zeichensatz korrekt festgelegt wird. Mit der Funktion MySQLI :: Get_Charset wird der Zeichensatz (Zeichensatz) erhalten, der von der aktuellen Datenbankverbindung verwendet wird. Einige Entwickler stellen jedoch fest, dass der zurückgegebene Zeichensatz bei Verwendung dieser Funktion immer lateinisch ist, auch wenn sie andere Zeichensätze (z. B. UTF-8) bei der Verbindung mit der Datenbank festgelegt haben. Warum passiert das? Was genau ist schief gelaufen?
Erstens besteht die Funktion der Funktion mySQLi :: get_charset darin, die mit der aktuellen Datenbankverbindung zugeordneten Zeichensatzinformationen zurückzugeben. Dieser Zeichensatz ist der Zeichensatz, der verwendet wird, wenn die Datenbank eine Verbindung herstellt, und nicht der Standardzeichensatz der Datenbank selbst. Die grundlegende Syntax ist wie folgt:
$charset = $mysqli->get_charset();
Wobei $ charset die Zeichensatzinformationen der aktuell verbundenen Verbindung enthalten.
Wenn Sie feststellen, dass der von MySQLI :: Get_Charset zurückgegebene Zeichensatz latein1 ist, gibt es normalerweise die folgenden Gründe:
Wenn Sie die MySQLI -Erweiterung verwenden, um eine Datenbankverbindung herzustellen, müssen Sie den Zeichensatz explizit angeben. Wenn der Zeichensatz bei der Verbindung mit der Datenbank nicht festgelegt wird oder wenn die Einstellung falsch ist, verwendet MySQLI den Latin1 -Zeichensatz standardmäßig. Selbst wenn der Standardzeichen der Datenbank selbst UTF-8 ist, verwendet die Verbindung Latin1 weiterhin, wenn der Zeichensatz nicht explizit in PHP festgelegt ist.
Der Zeichensatz kann explizit durch die Methode set_charset eingestellt werden:
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// Stellen Sie den Zeichen auf UTF-8
$mysqli->set_charset('utf8');
// Holen Sie sich den aktuellen Zeichensatz
$charset = $mysqli->get_charset();
echo $charset->charset;
Das set_charset ('utf8') im obigen Code gibt der Datenbankverbindung an, die UTF-8-Codierung zu verwenden, sodass Unicode-Zeichen in nachfolgenden Operationen korrekt verarbeitet werden können.
Selbst wenn der Zeichensatz im PHP -Code festgelegt ist, kann der Standardzeichensatz der Datenbank selbst auf Latin1 festgelegt werden. Dies kann sich auf den zurückgegebenen Zeichensatz auswirken, wenn die Datenbankverbindung hergestellt wird. Überprüfen Sie Ihre Datenbankkonfiguration, um sicherzustellen, dass der Standardzeichen der Datenbank korrekt ist (z. B. UTF-8). Sie können den Standardzeichensatz der Datenbank über die folgende SQL -Abfrage anzeigen:
SHOW VARIABLES LIKE 'character_set_database';
Zusätzlich zum Zeichensatz der Datenbank selbst können die Zeichensätze von Datentabellen und Spalten auch die Anzeige des Zeichensatzes beeinflussen. Es können Charaktercodierungsprobleme auftreten, wenn der Zeichensatz einer Tabelle oder Spalte nicht mit dem Zeichensatz übereinstimmt, wenn sie verkettet sind. Die Zeichensätze von Tabellen und Spalten können durch die folgenden SQL -Abfragen angezeigt werden:
SHOW TABLE STATUS WHERE name = 'your_table_name';
Sehen Sie sich alternativ den Zeichensatz für eine bestimmte Spalte an:
SHOW FULL COLUMNS FROM your_table_name;
Der Kern der Lösung dieses Problems besteht darin, sicherzustellen, dass die Datenbankverbindung im PHP -Code verwendet wird. Die spezifischen Methoden sind wie folgt:
Setzen Sie klar den Zeichensatz: Verwenden Sie die MySQLi :: set_charset -Methode, um den Zeichensatz auf UTF-8 festzulegen.
Überprüfen Sie die Zeichensätze von Datenbanken, Datentabellen und Spalten: Stellen Sie sicher, dass die Zeichensätze von Datenbanken, Datentabellen und Spalten auf UTF-8 festgelegt sind (oder die von Ihnen benötigten Zeichensatz).
Datenbankkonfiguration überprüfen: Bestätigen Sie, ob der Standardzeichensatz in der Datenbankserver-Konfigurationsdatei (z. B. My.cnf ) auf UTF-8 festgelegt ist.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 显式Stellen Sie den Zeichen auf UTF-8
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
}
$charset = $mysqli->get_charset();
echo $charset->charset; // Sollte als angezeigt werden utf8
Wenn Sie MySQLi :: get_charset verwenden, ist der zurückgegebene Zeichensatz der Zeichensatz, der von der aktuellen Datenbankverbindung verwendet wird. Wenn der Zeichensatz als Latin1 angezeigt wird, ist es wahrscheinlich, dass der Zeichensatz während der Verbindung nicht korrekt festgelegt wird oder die Zeichensatzeinstellungen der Datenbank, die Datentabelle und die Spalten inkonsistent sind. Stellen Sie sicher, dass Sie den richtigen Zeichen festlegen, wenn Sie eine Verbindung zur Datenbank herstellen, und überprüfen Sie die Zeichensatzkonfiguration der Datenbank und Tabellen, mit der Sie dieses Problem lösen können.