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): ?objectEn el estilo orientado a objetos, la misma función está disponible como el método $mysqli->get_charset().
$mysql— una conexión devuelta pormysqli_connect().- Valor de retorno — un object
stdClassque describe el conjunto de caracteres de la conexión, onullsi 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:
| Propiedad | Significado |
|---|---|
charset | El nombre del conjunto de caracteres, p. ej. utf8mb4. |
collation | La intercalación, p. ej. utf8mb4_general_ci. |
dir | Directorio del charset (suele estar vacío en compilaciones modernas). |
min_length | Número mínimo de bytes por carácter. |
max_length | Número máximo de bytes por carácter (4 para utf8mb4). |
number | ID interno del charset en MySQL. |
state | Indicadores 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 amysqli_set_charset()puedes leerlo de nuevo para asegurarte de que el cambio se aplicó. - Ramificar según el ancho en bytes. Leer
max_lengthte 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_clientde 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; entoncesmysqli_get_charset()debería reportarutf8mb4. - Acceder a propiedades en
null. Si la conexión falla, la función puede devolvernull; leer->charsetennullgenera 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().