get_charset
Découvrez la fonction mysqli_get_charset() en PHP, qui retourne le jeu de caractères utilisé pour la connexion à la base de données MySQL.
La fonction mysqli_get_charset() retourne le jeu de caractères que PHP utilise pour une connexion MySQL donnée — par exemple utf8mb4, latin1 ou utf8. Connaître le jeu de caractères actif est important car il contrôle la façon dont le texte est encodé entre PHP et MySQL : un mauvais jeu de caractères transforme les lettres accentuées, les emoji et les scripts non latins en "mojibake" illisible, et est une source classique de caractères ? dans les données stockées.
Cet article explique ce que retourne la fonction, comment lire chaque champ du résultat, et les raisons pratiques pour lesquelles vous l'appelleriez.
Syntaxe
mysqli_get_charset(mysqli $mysql): ?objectEn style orienté objet, la même fonction est disponible en tant que méthode $mysqli->get_charset().
$mysql— une connexion retournée parmysqli_connect().- Valeur de retour — un object
stdClassdécrivant le jeu de caractères de la connexion, ounullsi le jeu de caractères n'a pas pu être déterminé.
Contenu de l'object retourné
Contrairement aux fonctions qui retournent une simple string, mysqli_get_charset() retourne un object avec plusieurs champs. Les plus utiles sont :
| Propriété | Signification |
|---|---|
charset | Le nom du jeu de caractères, p. ex. utf8mb4. |
collation | Le classement, p. ex. utf8mb4_general_ci. |
dir | Répertoire du jeu de caractères (souvent vide sur les builds modernes). |
min_length | Nombre minimal d'octets par caractère. |
max_length | Nombre maximal d'octets par caractère (4 pour utf8mb4). |
number | Identifiant interne MySQL du jeu de caractères. |
state | Indicateurs d'état internes du jeu de caractères. |
Utilisation de base
Appelez la fonction sur une connexion valide et lisez la propriété charset :
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$charset = mysqli_get_charset($mysqli);
printf("Character set: %s\n", $charset->charset); // e.g. utf8mb4
printf("Collation: %s\n", $charset->collation); // e.g. utf8mb4_general_ci
mysqli_close($mysqli);
?>Nous nous connectons avec mysqli_connect(), vérifions les erreurs de connexion, puis lisons les champs charset et collation depuis l'object retourné.
Style orienté objet
Si vous préférez l'API mysqli en POO, utilisez la méthode get_charset() :
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
$charset = $mysqli->get_charset();
echo "Charset: {$charset->charset}\n";
echo "Max bytes: {$charset->max_length}\n"; // 4 for utf8mb4
$mysqli->close();
?>Quand l'utiliser ?
- Débogage des bugs d'encodage. Lorsque le texte stocké s'affiche comme
?ou avec des symboles déformés, confirmer le jeu de caractères de la connexion est la première étape de diagnostic. - Vérification qu'un appel à
set_charset()a pris effet. Après avoir appelémysqli_set_charset(), vous pouvez le relire pour être sûr que la modification a été appliquée. - Branchement sur la largeur en octets. Lire
max_lengthvous indique si la connexion peut stocker des caractères de 4 octets comme les emoji (utf8mb4) ou seulement jusqu'à 3 octets (utf8).
Obtenir uniquement le nom
Si vous n'avez besoin que du nom du jeu de caractères et non de l'object complet, mysqli_character_set_name() le retourne directement en tant que string :
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
echo $mysqli->character_set_name(); // e.g. utf8mb4
$mysqli->close();
?>Pièges courants
- Ne pas le confondre avec la variable MySQL
character_set_client. Cette fonction indique le jeu de caractères que PHP utilise pour communiquer avec le serveur ; elle ne change pas la façon dont les colonnes stockent les données — cela est fixé par la définition de la table/colonne. - Définir le jeu de caractères explicitement. Se fier au défaut du serveur est fragile selon les hôtes. Appelez
mysqli_set_charset($mysqli, "utf8mb4")juste après la connexion, puismysqli_get_charset()devrait indiquerutf8mb4. - Accéder aux propriétés sur
null. Si la connexion a échoué, la fonction peut retournernull; lire->charsetsurnullgénère un avertissement. Vérifiez toujours la connexion en premier.
Conclusion
mysqli_get_charset() retourne un object décrivant le jeu de caractères d'une connexion MySQLi — son nom, son classement et ses limites en octets. Utilisez-le pour diagnostiquer les problèmes d'encodage et pour confirmer que mysqli_set_charset() a été appliqué comme prévu. Pour obtenir uniquement le nom, utilisez mysqli_character_set_name().