Lorsque vous utilisez PHP pour manipuler les bases de données MySQL, nous devons souvent faire attention aux paramètres des ensembles de caractères, en particulier en ce qui concerne les caractères chinois ou autres caractères multiples. Les paramètres de définition de caractères incorrects peuvent entraîner des erreurs de code ou de stockage de données brouillées. Pour les ensembles de caractères, l'extension MySQLI de PHP fournit la fonction MySQLI :: get_charset , tandis que dans l'outil de ligne de commande MySQL (CLI), nous utilisons généralement des variables Show comme 'caractères_set_%' pour afficher les variables associées.
Cet article analysera les différences entre les deux en profondeur pour aider les développeurs à comprendre leurs utilisations et leurs différences.
MySQLI :: get_charset () est une méthode de l'objet MySQLI dans PHP, qui est utilisé pour obtenir les informations de jeu de caractères de la connexion actuelle.
Il renvoie un objet contenant les propriétés suivantes:
Charset : le nom du jeu de caractères du actuellement connecté, comme UTF8MB4
Collation : Collation, par ex. UTF8MB4_GENERAL_CI
DIR : Le répertoire du fichier de définition de jeu de caractères (généralement vide)
min_length , max_length , numéro , état : Informations sur le jeu de caractères utilisés en interne
Par exemple, utilisez du code pour obtenir le jeu de caractères de connexion actuel:
<?php
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
$charsetInfo = $mysqli->get_charset();
echo 'Jeu de caractères actuel: ' . $charsetInfo->charset . PHP_EOL;
echo 'Règles de tri: ' . $charsetInfo->collation . PHP_EOL;
$mysqli->close();
?>
Cette méthode s'adresse aux paramètres du jeu de caractères de l'objet de connexion MySQLI PHP actuel , qui est équivalent au paramètre MySQLI_SET_CHARSET () ou à la valeur par défaut.
Dans la CLI MySQL ou d'autres outils SQL,
Vous pouvez afficher les variables liées au jeu de caractères du serveur MySQL actuel via la commande suivante:
SHOW VARIABLES LIKE 'character_set_%';
Cela répertorie une série de configurations, telles que:
caractères_set_client : le jeu de caractères envoyé par le client au serveur
caractères_set_connection : le jeu de caractères de l'instruction d'analyse du serveur
caractères_set_database : le jeu de caractères de la base de données par défaut actuelle
caractères_set_results : le jeu de caractères du résultat de la requête est renvoyé par le serveur
caractères_set_server : jeu de caractères par défaut du serveur
caractères_set_system : jeu de caractères de métadonnées système
Ces variables impliquent à la fois des jeux de caractères au niveau du serveur et au niveau de la session , pas seulement des connexions PHP.
Par exemple, exécutez dans la CLI:
mysql> SHOW VARIABLES LIKE 'character_set_%';
Vous pouvez voir:
Variable_name | Valeur |
---|---|
caractères_set_client | UTF8MB4 |
caractères_set_connection | UTF8MB4 |
caractères_set_database | UTF8MB4 |
caractères_set_results | UTF8MB4 |
caractères_set_server | UTF8MB4 |
caractères_set_system | UTF8 |
Ces informations reflètent plus en détail la configuration du jeu de caractères de l'instance et de la session MySQL actuelles.
Points de comparaison | mysqli :: get_charset | Afficher des variables comme 'caractères_set_%' |
---|---|---|
Afficher les objets | Objet de connexion mysqli en php | Configuration du serveur MySQL et paramètres de session |
Se mettre en gamme | Le jeu de caractères et la sorte de la sortie actuellement connectée | Variables de jeu de caractères multiples pour le serveur et la session |
Comment obtenir | Méthode PHP | Déclarations SQL |
utiliser | Confirmez le jeu de caractères utilisé par l'objet MySQLI | Afficher et ajuster les jeux de caractères de niveau MySQL (client, connexion, base de données, etc.) |
Gamme d'impact | Affecte uniquement cette connexion PHP | Session globale / actuelle, partage multi-client |
En termes simples, mysqli :: get_charset () est une fin de PHP;
Afficher les variables comme 'caractères_set_%' est l'ensemble du serveur de base de données.
Lorsque nous développons des applications multilingues ou multi-régions,
Assurez-vous que les jeux de caractères du client (PHP), de la connexion, de la base de données et du serveur sont cohérents.
C'est la clé pour éviter le code brouillé.
Par exemple:
Vous pouvez définir mysqli_set_charset ('utf8mb4') en php,
Mais la caractères_set_database de la base de données est toujours latin1 ,
Les données stockées dans ce cas peuvent avoir des problèmes.
Via mysqli :: get_charset () , vous pouvez confirmer si la couche de connexion PHP est définie avec succès;
Et via des variables d'affichage comme 'caractères_set_%' , vous pouvez confirmer les paramètres par défaut du serveur et de la base de données.
Ce n'est qu'en combinant les deux que nous pouvons saisir pleinement le lien de jeu de caractères.
mysqli :: get_charset () et afficher des variables comme 'caractères_set_%'
Il s'agit de deux outils puissants pour les développeurs pour résoudre les problèmes de jeu de caractères.
L'un est du côté client (PHP) et un est du côté serveur (MySQL).
Comprendre les différences et les relations entre les deux,
Aide non seulement à rédiger des applications de haute qualité et sans brouillage,
Il peut également fournir plus d'indices lors du dépannage des flux de données du système transversal.
N'oubliez pas: la cohérence du jeu de caractères est un projet systématique.
Pas seulement les problèmes de configuration d'un côté de PHP ou MySQL.