PHP 5.4.36 Released

Conjuntos de caracteres

De forma ideal, un conjunto de caracteres apropiado será establecido a nivel del servidor, que está descrito dentro de la sección » Configuración del conjunto de caracteres del manual del Servidor MySQL. De forma alternativa, cada API de MySQL ofrece métodos para establecer el conjunto de caracteres en tiempo de ejecución.

Precaución

El conjunto de caracteres y el escape de caracteres

El conjunto de caracteres debería entenderse y ser definido, ya que afecta a cada acción, e incluye implicaciones de seguridad. Por ejemplo, el mecanismo de escape (p.ej., mysqli_real_escape_string() para mysqli, mysql_real_escape_string() para mysql, y PDO::quote() para PDO_MySQL) cumplirá con esta configuración. Es importante darse cuenta que estas funciones no usarán el conjunto de caracteres que está definido en una consulta, por lo que, por ejemplo, lo siguiente no tendrá efecto sobre ellas:

Ejemplo #1 Problemas al establecer el conjunto de caracteres con SQL

<?php

$mysqli 
= new mysqli("localhost""mi_usuario""mi_contraseña""world");

// No afectará a $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8");

// No afectará a $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8");

// Pero esto sí afectará a $mysqli->real_escape_string();
$mysqli->set_charset('utf8'));

?>

Abajo hay ejemplos que demuestran cómo alterar adecuadamente el conjunto de caracteres en tiempo de ejecución usando cada API.

Ejemplo #2 Ejemplo para establecer el conjunto de caracteres: mysqli

<?php

$mysqli 
= new mysqli("localhost""mi_usuario""mi_contraseña""world");

if (!
$mysqli->set_charset('utf8')) {
    
printf("Error cargando el conjunto de caracteres utf8: %s\n"$mysqli->error);
} else {
    
printf("Conjunto de caracteres actual: %s\n"$mysqli->character_set_name());
}

print_r$mysqli->get_charset() );

?>

Ejemplo #3 Ejemplo para establecer el conjunto de caracteres: pdo_mysql

Nota: Esto sólo funciona a partir de PHP 5.3.6.

<?php
$pdo 
= new PDO("mysql:host=localhost;dbname=world;charset=utf8"'mi_usuario''mi_contraseña');
?>

Ejemplo #4 Ejemplo para establecer el conjunto de caracteres: mysql

<?php

$conexión 
mysql_connect("localhost""mi_usuario""mi_contraseña");
$bd   mysql_select_db("world");

if (!
mysql_set_charset('utf8'$conexión)) {
    echo 
"Error: No se pudo establecer el conjunto de caracteres.\n";
    exit;
}

echo 
'El conjunto de caracteres actual es: ' .  mysql_client_encoding($conexión);

?>
add a note add a note

User Contributed Notes 2 notes

up
1
jure dot sah at monoliths dot com
14 days ago
Please note that specifying the character set as "utf-8" will be ignored and will result in the table being treated as whatever is the default (latin1). The correct spelling is "utf8".
up
-9
go at NOSPAMME dot quidera dot com
2 years ago
If none of the character set alterations work and the data is valid UTF8 and is garbled when saved in mysql. Then your table is not supporting UTF8 and likely is Latin1 or something else. So  you will need to update you table, in the case of MySQL do the following:

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8;
To Top