mysqli::set_charset

mysqli_set_charset

(PHP 5 >= 5.0.5, PHP 7)

mysqli::set_charset -- mysqli_set_charsetEstablece el conjunto de caracteres predeterminado del cliente

Descripción

Estilo orientado a objetos

bool mysqli::set_charset ( string $charset )

Estilo por procedimientos

bool mysqli_set_charset ( mysqli $link , string $charset )

Establece el conjunto de caracteres predeterminado a usar cuando se envían datos desde y hacia el servidor de la base de datos.

Parámetros

link

Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

charset

El conjunto de caracteres a establecer como predeterminado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Notas

Nota:

Para usar esta función en una plataforma Windows se necesita la biblioteca cliente de MySQL version 4.1.11 o superior (para MySQL 5.0 se necesita 5.0.6 o superior).

Nota:

Esta es la mejor forma de cambiar el conjunto de caracteres. No se recomienda usar mysqli_query() para establecerlo (como SET NAMES utf8). Véase la sección Conceptos del conjunto de caracteres de MySQL para más información.

Ejemplos

Ejemplo #1 Ejemplo de mysqli::set_charset()

Estilo orientado a objetos

<?php
$mysqli 
= new mysqli("localhost""mi_usuario""mi_contraseña""test");

/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

printf("Conjunto de caracteres inicial: %s\n"$mysqli->character_set_name());

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

$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace 
mysqli_connect('localhost''mi_usuario''mi_contraseña''test');

/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

printf("Conjunto de caracteres inicial: %s\n"mysqli_character_set_name($enlace));

/* cambiar el conjunto de caracteres a utf8 */
if (!mysqli_set_charset($enlace"utf8")) {
    
printf("Error cargando el conjunto de caracteres utf8: %s\n"mysqli_error($enlace));
    exit();
} else {
    
printf("Conjunto de caracteres actual: %s\n"mysqli_character_set_name($enlace));
}

mysqli_close($enlace);
?>

El resultado de los ejemplos sería algo similar a:

Conjunto de caracteres inicial: latin1
Conjunto de caracteres actual: utf8

Ver también

add a note add a note

User Contributed Notes 3 notes

up
4
coder at punkass dot com
11 years ago
On windows, with "stock" PHP 5.1.2, there is no set_charset function at all. One may have to replace php_mysqli.dll, and libmysql.dll with proper versions, which provided by MySQL at http://dev.mysql.com/downloads/connector/php/
up
2
Emmanuel Appiah
1 year ago
So in my case, I had tried changing the collation from utf8mb4_unicode_ci for mysql and had to change it to uft8_general_ci.

Then pasted :

mysqli_set_charset( $con, 'utf8');

right before I did the SELECT command.

This is my code for reading from db :

/*

$DB_SERVER="db_server_name";
$DB_USER_READER="root";
$DB_PASS_READER="passw*rd";
$DB_NAME="db_name";
$DB_PORT="port number";

$SELECT_WHAT="`name_of_column_as_in_your_table`";
$WHICH_TBL="`table_name`";
$ON_WHAT_CONDITION="`id`='7'";

*/

$con = mysqli_connect($DB_SERVER, $DB_USER_READER, $DB_PASS_READER, $DB_NAME, $DB_PORT);//this is the unique connection for the selection
   
    mysqli_set_charset( $con, 'utf8');
   
       
        $slct_stmnt = "SELECT ".$SELECT_WHAT." FROM ".$WHICH_TBL." WHERE ".$ON_WHAT_CONDITION;

    $slct_query = mysqli_query($con, $slct_stmnt);
   
        if ($slct_query==true) {
//Do your stuff here . . .
}

And it worked like a charm. All the best. The above code can work with reading chineese, russian or arabic or any international language from the database's table column holding such data.
up
0
claude dot pache at gmail dot com
18 days ago
Although the documentation says that using that function is preferred than using SET NAMES, it is not sufficient in case you use a collation different from the default one:

<?php
// That will reset collation_connection to latin1_swedish_ci
// (the default collation for latin1):
$mysqli->set_charset('latin1');

// You have to execute the following statement *after* mysqli::set_charset()
// in order to get the desired value for collation_connection:
$mysqli->query("SET NAMES latin1 COLLATE latin1_german1_ci");
To Top