W3docs

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): ?object

En style orienté objet, la même fonction est disponible en tant que méthode $mysqli->get_charset().

  • $mysql — une connexion retournée par mysqli_connect().
  • Valeur de retour — un object stdClass décrivant le jeu de caractères de la connexion, ou null si 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
charsetLe nom du jeu de caractères, p. ex. utf8mb4.
collationLe classement, p. ex. utf8mb4_general_ci.
dirRépertoire du jeu de caractères (souvent vide sur les builds modernes).
min_lengthNombre minimal d'octets par caractère.
max_lengthNombre maximal d'octets par caractère (4 pour utf8mb4).
numberIdentifiant interne MySQL du jeu de caractères.
stateIndicateurs 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_length vous 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, puis mysqli_get_charset() devrait indiquer utf8mb4.
  • Accéder aux propriétés sur null. Si la connexion a échoué, la fonction peut retourner null ; lire ->charset sur null gé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().

Pratique

Pratique
Que fait la fonction " `mb_internal_encoding()` en PHP ?
Que fait la fonction " `mb_internal_encoding()` en PHP ?
Was this page helpful?