MySQLI :: caractères_set_name est une méthode dans l'extension MySQLI de PHP qui renvoie le nom de jeu de caractères utilisé par la connexion de la base de données actuelle. Le prototype de cette méthode est le suivant:
string mysqli::character_set_name ( void )
Cela signifie que vous pouvez l'appeler avant d'effectuer l'opération SQL pour confirmer que le jeu de caractères utilisé par la connexion est cohérent avec votre configuration de base de données.
MySQL prend en charge plusieurs jeux de caractères, tels que UTF8 , UTF8MB4 , Latin1 , etc. Les jeux de caractères incohérents peuvent entraîner les problèmes suivants:
Les caractères chinois sont brouillés ou coupés
Impossible d'exécuter correctement la requête contenant un contenu multilingue
Une exception s'est produite après que les données soient écrites dans la base de données pour relire
Les problèmes sont particulièrement courants, en particulier lorsque le jeu de caractères par défaut de MySQL ne correspond pas au jeu de caractères utilisé par PHP. Par conséquent, c'est une bonne pratique de vérifier l'ensemble de caractères à temps après l'établissement de la connexion.
Voici un exemple complet pour détecter et confirmer les paramètres du jeu de caractères des paramètres actuellement connectés:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// Vérifiez si la connexion réussit
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Obtenez le jeu de caractères du actuellement connecté
$currentCharset = $mysqli->character_set_name();
echo "Le jeu de caractères utilisé par la connexion actuelle est: " . $currentCharset;
// Vérifiez s'il s'agit du jeu de caractères attendu,Par exemple utf8mb4
if ($currentCharset !== 'utf8mb4') {
echo "Set de personnage incohérent,Régler en tant que utf8mb4...";
if (!$mysqli->set_charset("utf8mb4")) {
die("Échec du jeu de caractères: " . $mysqli->error);
}
echo "Le jeu de caractères a été mis à jour pour: " . $mysqli->character_set_name();
}
?>
Une fois cet exemple connecté à la base de données, il publie d'abord le jeu de caractères actuellement utilisé. S'il n'est pas UTF8MB4 , essayez de réinitialiser le jeu de caractères. En coopérant avec mysqli :: set_charset et mysqli :: caractères_set_name , assurez-vous que le jeu de caractères est complètement cohérent.
Si vous souhaitez vous assurer que le jeu de caractères utilisé par PHP est exactement le même que le jeu de caractères par défaut du côté serveur, envisagez de lire les paramètres par défaut du fichier de configuration de MySQL (généralement My.cnf ou My.ini ).
Par exemple, vous pouvez utiliser la requête SQL suivante pour afficher les paramètres de définition de caractères par défaut côté serveur:
<?php
$result = $mysqli->query("SHOW VARIABLES LIKE 'character_set_server'");
$row = $result->fetch_assoc();
$serverCharset = $row['Value'];
echo "MySQLLe jeu de caractères par défaut du serveur est: " . $serverCharset;
if ($mysqli->character_set_name() !== $serverCharset) {
echo "检测到Set de personnage incohérent,Essayer de synchroniser...";
if (!$mysqli->set_charset($serverCharset)) {
die("Échec du jeu de caractères: " . $mysqli->error);
}
echo "Le jeu de caractères a été synchronisé comme: " . $mysqli->character_set_name();
}
?>
Ce code vérifie non seulement le jeu de caractères actuellement connecté, mais le compare également au jeu de caractères par défaut du serveur, synchronise automatiquement les paramètres du jeu de caractères pour garantir davantage la cohérence des données.