Lorsque vous utilisez l'extension MySQLI pour la connexion de la base de données, la méthode MySQLI :: set_charset est souvent utilisée pour définir le jeu de caractères. En théorie, si le jeu de caractères est réglé correctement, toute transmission et requête de données devraient pouvoir être codées en fonction du jeu de caractères spécifié. Cependant, dans une utilisation réelle, nous rencontrons souvent des situations où le paramètre MySQLI :: Set_Charset n'a aucun effet, ce qui entraîne des données brouillées ou un décalage dans les jeux de caractères.
Cet article expliquera en détail les raisons pour lesquelles le paramètre MySQLI :: Set_Charset est invalide, les erreurs courantes et les techniques de dépannage pour vous aider à résoudre le problème rapidement.
Lors de la configuration du jeu de caractères, MySQLI :: Set_Charset doit être appelé une fois la connexion de la base de données réussie, mais si vous appelez la méthode dans certains cas spéciaux, cela peut ne pas prendre effet. Les raisons courantes comprennent:
Le jeu de caractères n'est pas défini dans le temps après la connexion
MySQLI :: Set_Charset doit être appelé une fois la connexion de la base de données réussie, et s'il est appelé avant la connexion, le jeu de caractères ne sera pas réglé correctement.
Les paramètres de jeu de caractères sont écrasés avant la connexion <br> Si le jeu de caractères a été défini lors de la connexion de la base de données (comme via le paramètre Charset dans la chaîne de connexion), MySQLI :: set_charset peut être ignoré ou n'a aucun effet.
Les ensembles de caractères sont incompatibles avec la base de données <br> Si le jeu de caractères que vous définissez est incompatible avec le jeu de caractères par défaut de la base de données, il peut entraîner l'invalide du paramètre de jeu de caractères. Vous pouvez vérifier les paramètres du jeu de caractères de la base de données pour confirmer s'il est cohérent.
Supposons que vous exécutiez le code suivant:
$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->set_charset("utf8mb4");
Mais le code brouillé apparaît toujours après le réglage. Les raisons possibles sont:
La base de données ne prend pas en charge ce jeu de caractères <br> Vérifiez si la base de données prend en charge le jeu de caractères que vous définissez. Par exemple, UTF8MB4 est un jeu de caractères qui n'est pris en charge que par MySQL version 5.5+. Si la version de la base de données est inférieure, elle peut ne pas être définie sur UTF8MB4 .
Problèmes de support de caractéristiques <br> Si la base de données n'a pas le jeu de caractères UTF8MB4 activé, vous pouvez vérifier si la base de données prend en charge le jeu de caractères par la requête SQL suivante:
SHOW CHARACTER SET LIKE 'utf8mb4';
S'il n'y a pas de résultat, cela signifie que la base de données ne prend pas en charge le jeu de caractères UTF8MB4 . Vous pouvez choisir d'utiliser UTF8 ou de mettre à niveau la base de données.
Si vous avez spécifié le jeu de caractères dans la chaîne de connexion:
$mysqli = new mysqli("localhost", "username", "password", "database", 3306, NULL);
$mysqli->set_charset("utf8mb4");
Dans certains cas, le réglage de $ mysqli-> set_charset ("utf8mb4") peut être ignoré car le jeu de caractères est spécifié à la connexion. Dans ce cas, vous pouvez vérifier si la chaîne de connexion contient déjà le paramètre de charme .
Si vous essayez de définir le jeu de caractères avant de vous connecter à la base de données, set_charset ne prendra pas effet:
$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->set_charset("utf8mb4");
L'ordre d'appel correct doit être d'établir d'abord la connexion, puis de définir le jeu de caractères. Assurez-vous que set_charset est appelé immédiatement après la connexion à la base de données.
Tout d'abord, confirmez si le jeu de caractères de votre base de données et de votre table correspond au jeu de caractères SET. Vous pouvez afficher les paramètres du jeu de caractères de la base de données actuelle via la requête SQL suivante:
SHOW CREATE DATABASE `database_name`;
Si vous constatez que les paramètres du jeu de caractères sont incohérents, vous pouvez modifier le jeu de caractères de la base de données via la commande suivante:
ALTER DATABASE `database_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Parfois, la configuration de PHP peut affecter le réglage du jeu de caractères. Assurez-vous que le fichier default_charse dans le fichier php.ini est défini sur le jeu de caractères que vous souhaitez, par exemple:
default_charset = "UTF-8"
Assurez-vous également que votre environnement PHP prend en charge les extensions MySQLI et n'est pas désactivé.
Si le problème n'est toujours pas résolu, vous pouvez ouvrir le rapport d'erreur détaillé pour voir s'il existe des informations d'erreur sur les paramètres du jeu de caractères. Par exemple:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Après avoir activé les rapports d'erreur, PHP lancera une exception lors de l'exécution d'une erreur pour vous aider à diagnostiquer le problème.
Étiquettes associées:
mysqli