Lors de la connexion à une base de données à l'aide de l'extension MySQLI de PHP, il est souvent nécessaire de définir le jeu de caractères connecté pour assurer la lecture et l'écriture correctes des données. Habituellement, nous utiliserons $ mysqli-> set_charset ('utf8') pour définir le jeu de caractères. Mais parfois, vous rencontrerez une erreur après avoir appelé set_charset , ce qui fait que le programme ne s'exécute pas normalement. Alors, quel est exactement le problème? Cet article analysera les raisons de l'erreur dans la définition de MySQLI :: Set_Charset en combinaison avec des scénarios communs et fournit des idées de dépannage.
Une erreur s'est produite lors de l'appel $ mysqli-> set_charset ('utf8') , les invites communes incluent:
AVERTISSEMENT: mysqli :: set_charset (): erreur
Échec de la définition
Caractères d'ordures ou exception d'insertion de données
La plupart de ces erreurs sont liées à la décalage dans les paramètres des jeux de caractères.
Les paramètres du jeu de caractères du côté de la base de données ne sont pas unifiés
Le jeu de caractères de la base de données ou de la table de données est incompatible avec le jeu de caractères des paramètres de connexion.
Par exemple, le jeu de caractères par défaut de la base de données est Latin1 et le programme est défini sur UTF8 . L'inadéquation entre les deux peut provoquer une erreur.
Version MySQL ou limitations du pilote
Les anciennes versions de MySQL ont un support limité pour certains ensembles de caractères.
Lors de la définition du jeu de caractères , si le jeu de caractères spécifié n'existe pas ou n'est pas pris en charge, une erreur sera signalée.
Erreur de nom de jeu de caractère
Le nom de jeu de caractères passé dans set_charset doit correspondre strictement le nom pris en charge par MySQL.
Par exemple, l'utilisation de l'UTF-8 fera une erreur, la bonne est UTF8 .
La connexion n'est pas réussie ou a été fermée
Si l'objet $ mysqli ne se connecte pas avec succès à la base de données, l'appel set_charset échouera également.
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
Assurez-vous qu'il n'y a aucune exception à la connexion avant de continuer à définir le jeu de caractères.
Requête des jeux de caractères soutenus par MySQL avec le SQL suivant:
$result = $mysqli->query("SHOW CHARACTER SET");
while ($row = $result->fetch_assoc()) {
echo $row['Charset'] . "\n";
}
Confirmez si le jeu de caractères que vous souhaitez définir existe, comme UTF8 .
Lors de la définition des ensembles de caractères, faites attention à la sensibilité des caisses et aux spécifications du nom:
if (!$mysqli->set_charset('utf8')) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
echo "Current character set: " . $mysqli->character_set_name();
}
N'utilisez pas de chaînes comme UTF-8 .
Après vous être connecté à MySQL, vérifiez les jeux de caractères de la base de données et des tables:
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
S'il est incohérent, envisagez de modifier le jeu de caractères de la base de données ou du tableau pour éviter les conflits.
Parfois, vous pouvez spécifier directement le jeu de caractères lors de la connexion pour éviter d'appeler set_charset :
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
$mysqli->query("SET NAMES 'utf8'");
Mais il est recommandé d'utiliser Set_Charset en premier, car il est plus sûr que les noms de set .
MySQLI :: Set_Charset Réglage des erreurs principalement en raison de jeux de caractères incompatibles ou de noms mauvais. Lors du dépannage, assurez-vous:
La connexion de la base de données est réussie
Le jeu de caractères utilisé est correct et pris en charge
Les jeux de caractères des bases de données et des tables sont cohérents avec les jeux de caractères concaténés
En vérifiant les étapes ci-dessus un par un, le problème des erreurs dans la définition du jeu de caractères peut généralement être résolu pour s'assurer que le codage des caractères de la transmission de données entre PHP et MySQL est correct.
Étiquettes associées:
mysqli