Wenn wir PHP verwenden, um MySQL -Datenbanken zu manipulieren, müssen wir häufig auf die Charakter -Set -Einstellungen achten, insbesondere wenn es um chinesische oder andere Multibyte -Zeichen geht. Unsachgemäße Zeichensatzeinstellungen können zu Fehlern für verstümmelte Code oder Datenspeicher führen. Für Zeichensätze enthält die MySQLI -Erweiterung von PHP die Funktion MySQLi :: get_charset , während wir im Befehlszeilen -Tool (CLI) in MySQL (CLI) in der Regel Variablen wie 'Zeichen_Set_%' zum Anzeigen von verwandten Variablen verwenden.
Dieser Artikel wird die Unterschiede zwischen den beiden Tiefen analysieren, um Entwicklern zu helfen, ihre Verwendung und Unterschiede zu verstehen.
Mysqli :: get_charset () ist eine Methode des MySQLI -Objekts in PHP, mit dem die Zeichensatzinformationen der aktuellen Verbindung erhalten werden.
Es gibt ein Objekt zurück, das die folgenden Eigenschaften enthält:
Zeichenset : Der Zeichensatz Name des aktuell angeschlossenen, wie UTF8MB4
Zusammenfassung : Zusammenfassung, z. UTF8MB4_GENERAL_CI
DIR : Das Verzeichnis der Charakter -Set -Definitionsdatei (normalerweise leer)
min_length , max_length , nummer , Zustand : intern verwendete Zeichensatzinformationen
Verwenden Sie beispielsweise Code, um den aktuellen Verbindungszeichensatz zu erhalten:
<?php
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('Verbindung ist fehlgeschlagen: ' . $mysqli->connect_error);
}
$charsetInfo = $mysqli->get_charset();
echo 'Aktueller Zeichensatz: ' . $charsetInfo->charset . PHP_EOL;
echo 'Sortierregeln: ' . $charsetInfo->collation . PHP_EOL;
$mysqli->close();
?>
Diese Methode richtet sich an die Zeichensatzeinstellungen des aktuellen PHP MySQLI -Verbindungsobjekts , das dem Einstellungs- oder Standardwert von MySQLI_Set_Charset () oder Standardwert entspricht.
In der MySQL CLI oder anderen SQL -Tools,
Sie können die mit Zeichen gesetzten verwandten Variablen des aktuellen MySQL -Servers über den folgenden Befehl anzeigen:
SHOW VARIABLES LIKE 'character_set_%';
Dies listet eine Reihe von Konfigurationen auf, wie z. B.:
Zeichen_Set_Client : Der vom Client an den Server gesendete Zeichensatz
Zeichen_Set_Connection : Der Zeichensatz der Server -Parsing -Anweisung
Zeichen_Set_Database : Der Zeichensatz der aktuellen Standarddatenbank
charakter_set_results : Der Zeichensatz des Abfrageergebnisses wird vom Server zurückgegeben
Zeichen_Set_Server : Server -Standardzeichensatz
Zeichen_Set_System : Systemmetadaten Zeichensatz
Diese Variablen beinhalten sowohl Charaktersätze auf Serverebene als auch Sitzungsebene , nicht nur mit PHP-Verbindungen.
Zum Beispiel in der CLI laufen:
mysql> SHOW VARIABLES LIKE 'character_set_%';
Sie können sehen:
Variable_name | Wert |
---|---|
charakter_set_client | UTF8MB4 |
charakter_set_connection | UTF8MB4 |
charakter_set_database | UTF8MB4 |
charakter_set_results | UTF8MB4 |
Zeichen_Set_Server | UTF8MB4 |
Zeichen_Set_System | UTF8 |
Diese Informationen spiegeln die Charakter -Set -Konfiguration der aktuellen MySQL -Instanz und -sitzung besser wider.
Vergleichspunkte | Mysqli :: get_charset | Variablen wie 'charakter_set_%' anzeigen |
---|---|---|
Objekte anzeigen | MySQLi -Verbindungsobjekt in PHP | MySQL Server -Konfiguration und Sitzungsparameter |
Reichweite erhalten | Der Charakter -Set und die Art der aktuell verbundenen | Mehrere Zeichensatzvariablen für Server und Sitzung |
Wie man bekommt | PHP -Methode | SQL -Anweisungen |
verwenden | Bestätigen Sie den von MySQLI Objekt verwendeten Zeichensatz | MySQL-Level-Zeichensätze (Client, Verbindung, Datenbank usw.) anzeigen und anpassen |
Aufprallbereich | Betrifft nur diese PHP -Verbindung | Globale/aktuelle Sitzung, mehrklassische Freigabe |
Einfach ausgedrückt, Mysqli :: get_charset () ist ein Ende von PHP;
Anzeigen Variablen wie 'charakter_set_%' ist der gesamte Datenbankserver.
Wenn wir mehrsprachige oder multi-region-unterstützte Anwendungen entwickeln,
Stellen Sie sicher, dass die Zeichensätze des Clients (PHP), der Verbindung, der Datenbank und des Servers konsistent sind.
Es ist der Schlüssel, um verstümmelte Code zu vermeiden.
Zum Beispiel:
Sie können MySQLI_Set_Charset ('utf8mb4') in PHP festlegen.
Aber die charakter_set_database der Datenbank ist immer noch latein1 ,
Die in diesem Fall gespeicherten Daten können Probleme haben.
Über MySQLI :: get_charset () können Sie bestätigen, ob die PHP -Verbindungsschicht erfolgreich eingestellt wird.
Und über Variablen wie 'Charakter_Set_%' können Sie die Standardeinstellungen des Servers und der Datenbank bestätigen.
Nur durch Kombination der beiden können wir den Charakter -Set -Link vollständig erfassen.
Mysqli :: get_charset () und Variablen wie 'charakter_set_%' anzeigen
Es sind zwei leistungsstarke Werkzeuge für Entwickler, um Probleme mit Charaktersetieren zu beheben.
Einer ist auf der Seite Client (PHP) und einer auf der Seite Server (MySQL).
Verstehen Sie die Unterschiede und Beziehungen zwischen beiden,
Hilft nicht nur dazu bei, hochwertige, verstümmelte Anwendungen zu schreiben.
Es kann auch mehr Hinweise liefern, wenn die Daten zur Fehlerbehebung bei der Fehlerbehebung fließt.
Denken Sie daran: Die Charakter -Set -Konsistenz ist ein systematisches Projekt.
Nicht nur Konfigurationsprobleme auf einer Seite von PHP oder MySQL.