W3docs

get_charset

Aprende cómo usar la función mysqli_get_charset() en PHP para obtener el conjunto de caracteres de la conexión a la base de datos MySQL.

La función mysqli_get_charset() devuelve el conjunto de caracteres que PHP utiliza para una conexión MySQL determinada — por ejemplo utf8mb4, latin1 o utf8. Conocer el charset activo es importante porque controla cómo se codifica el texto entre PHP y MySQL: un charset incorrecto convierte letras acentuadas, emoji y caracteres no latinos en "mojibake" ilegible, y es una fuente clásica de caracteres ? en los datos almacenados.

Este artículo explica qué devuelve la función, cómo leer cada campo del resultado y las razones prácticas por las que la utilizarías.

Sintaxis

mysqli_get_charset(mysqli $mysql): ?object

En el estilo orientado a objetos, la misma función está disponible como el método $mysqli->get_charset().

  • $mysql — una conexión devuelta por mysqli_connect().
  • Valor de retorno — un object stdClass que describe el conjunto de caracteres de la conexión, o null si el charset no pudo determinarse.

Qué contiene el object devuelto

A diferencia de las funciones que devuelven un string simple, mysqli_get_charset() devuelve un object con varios campos. Los más útiles son:

PropiedadSignificado
charsetEl nombre del conjunto de caracteres, p. ej. utf8mb4.
collationLa intercalación, p. ej. utf8mb4_general_ci.
dirDirectorio del charset (suele estar vacío en compilaciones modernas).
min_lengthNúmero mínimo de bytes por carácter.
max_lengthNúmero máximo de bytes por carácter (4 para utf8mb4).
numberID interno del charset en MySQL.
stateIndicadores de estado internos del charset.

Uso básico

Llama a la función con una conexión válida y lee la propiedad 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);
?>

Nos conectamos con mysqli_connect(), verificamos si hay un error de conexión y luego leemos los campos charset y collation del object devuelto.

Estilo orientado a objetos

Si prefieres la API OOP de mysqli, usa el método 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();
?>

¿Cuándo lo usaría?

  • Depurar errores de codificación. Cuando el texto almacenado aparece como ? o símbolos corruptos, confirmar el charset de la conexión es el primer paso de diagnóstico.
  • Verificar que una llamada a set_charset() tuvo efecto. Después de llamar a mysqli_set_charset() puedes leerlo de nuevo para asegurarte de que el cambio se aplicó.
  • Ramificar según el ancho en bytes. Leer max_length te indica si la conexión puede almacenar caracteres de 4 bytes como los emoji (utf8mb4) o solo hasta 3 bytes (utf8).

Obtener solo el nombre

Si solo necesitas el nombre del charset y no el object completo, mysqli_character_set_name() lo devuelve directamente como un string:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

echo $mysqli->character_set_name(); // e.g. utf8mb4

$mysqli->close();
?>

Errores comunes

  • No la confundas con la variable character_set_client de MySQL. Esta función informa el charset que PHP utiliza para comunicarse con el servidor; no cambia cómo las columnas almacenan los datos — eso lo fija la definición de la tabla o columna.
  • Establece el charset de forma explícita. Depender del valor predeterminado del servidor es frágil entre distintos hosts. Llama a mysqli_set_charset($mysqli, "utf8mb4") justo después de conectarte; entonces mysqli_get_charset() debería reportar utf8mb4.
  • Acceder a propiedades en null. Si la conexión falla, la función puede devolver null; leer ->charset en null genera un aviso. Verifica siempre la conexión primero.

Conclusión

mysqli_get_charset() devuelve un object que describe el conjunto de caracteres de una conexión MySQLi — su nombre, intercalación y límites de bytes. Úsala para diagnosticar problemas de codificación y para confirmar que mysqli_set_charset() se aplicó correctamente. Si solo necesitas el nombre, recurre a mysqli_character_set_name().

Práctica

Práctica
¿Qué hace la función " `mb_internal_encoding()` en PHP?
¿Qué hace la función " `mb_internal_encoding()` en PHP?
Was this page helpful?