W3docs

character_set_name

Aprende a usar mysqli_character_set_name() en PHP para obtener el nombre del juego de caracteres de la conexión MySQL actual.

La función mysqli_character_set_name() devuelve el juego de caracteres predeterminado en uso para la conexión MySQLi actual — por ejemplo utf8mb4, utf8 o latin1. Esta página explica qué devuelve la función, su sintaxis en ambos estilos, cuándo usarla y los problemas de codificación que ayuda a detectar.

Qué controla el juego de caracteres

El juego de caracteres de la conexión le indica a MySQL cómo interpretar los bytes que envías (en sentencias INSERT/UPDATE y parámetros de consulta) y cómo codificar los bytes que devuelve. Si el charset de la conexión no coincide con la codificación real de tus cadenas, obtendrás mojibake — letras acentuadas corruptas, emojis convertidos en ???? y pérdida silenciosa de datos.

mysqli_character_set_name() es la forma más rápida de inspeccionar ese ajuste en tiempo de ejecución. Es un diagnóstico de solo lectura: nunca cambia nada. Para cambiar el charset usa set_charset().

Sintaxis

La función tiene una forma orientada a objetos y una forma procedimental. Son equivalentes — elige la que se ajuste a tu código.

// Object-oriented style
string $mysqli->character_set_name()

// Procedural style
string mysqli_character_set_name(mysqli $mysqli)
  • Parámetro (solo procedimental): $mysqli — una conexión devuelta por mysqli_connect() o new mysqli().
  • Valor de retorno: un string con el nombre del juego de caracteres actual (p. ej. "utf8mb4"). No devuelve false; en una conexión válida siempre existe un charset.

Cómo usar mysqli_character_set_name()

Llámala sobre una conexión abierta e imprime el resultado:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

echo "Character set: " . $mysqli->character_set_name();

$mysqli->close();
?>

Una salida típica, antes de definir nada explícitamente, es el valor predeterminado del servidor:

Character set: utf8mb4

Lo mismo en estilo procedimental:

<?php
$mysqli = mysqli_connect("localhost", "your_username", "your_password", "database");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
}

echo "Character set: " . mysqli_character_set_name($mysqli);

mysqli_close($mysqli);
?>

Leer el charset después de cambiarlo

Dado que la función informa el ajuste en tiempo real, resulta útil para confirmar que una llamada a set_charset() realmente surtió efecto:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

echo "Before: " . $mysqli->character_set_name() . "\n";

$mysqli->set_charset("utf8mb4");
echo "After:  " . $mysqli->character_set_name() . "\n";

$mysqli->close();
?>
Before: latin1
After:  utf8mb4

Por qué debes establecer el charset en lugar de solo leerlo

mysqli_character_set_name() solo informa el charset — no puede corregirlo. Para soporte completo de Unicode (incluidos emojis y muchos caracteres CJK) establece utf8mb4 justo después de conectarte:

<?php
$mysqli = new mysqli("localhost", "your_username", "your_password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

$mysqli->set_charset("utf8mb4");
$mysqli->query("INSERT INTO users (name, email) VALUES ('Jörg 🚀', '[email protected]')");

$mysqli->close();
?>

Notas y advertencias:

  • Prefiere utf8mb4 sobre utf8. El utf8 heredado de MySQL es un alias de 3 bytes que no puede almacenar caracteres de 4 bytes como los emojis. utf8mb4 es UTF-8 real y completo.
  • No ejecutes SET NAMES ... como consulta para cambiar el charset. Actualiza la sesión en el lado del servidor pero deja a la biblioteca cliente sin saberlo, lo que rompe real_escape_string(). Usa siempre set_charset() para que ambos permanezcan sincronizados.
  • El nombre devuelto corresponde al charset de la conexión, que es independiente del charset de una columna o tabla definido en el esquema.

Funciones relacionadas

Conclusión

mysqli_character_set_name() es un diagnóstico pequeño y fiable para confirmar qué juego de caracteres está usando una conexión MySQL. Úsalo para depurar problemas de codificación y luego corrígelos con set_charset("utf8mb4") para que tu aplicación almacene texto acentuado y emojis correctamente.

Práctica

Práctica
¿Qué devuelve mysqli_character_set_name()?
¿Qué devuelve mysqli_character_set_name()?
Was this page helpful?