2011-01-31 90 views
22


Estoy tratando de guardar los acentos franceses en mi base de datos, pero no se guardan como deberían en la base de datos.
Por ejemplo, una "é" se guarda como "Ã ©".
He intentado establecer mis archivos en "Unicode (utf-8)", los campos en la base de datos son "utf8_general_ci", así como el propio DB.
Cuando miro mis datos publicados a través de AJAX con Firebug, veo el acento pasado como "é", por lo que es correcto.

¡Gracias y déjame saber que necesitas más información!Guardar acentos en la base de datos MySQL

Respuesta

39

Personalmente resuelto el mismo problema agregando después de que el código de conexión MySQL:

mysql_set_charset("utf8");

o: mysqli_set_charset("utf8");

o la POO equivalente: $mysqli_link->set_charset("utf8");

Y a veces usted tiene que definir la php principal charset añadiendo este código: mb_internal_encoding('UTF-8');

En el lado HTML del cliente, debe agregar los siguientes datos de encabezado:

<meta http-equiv="Content-type" content="text/html;charset=utf-8" /> 

Para utilizar los resultados de JSON AJAX (p. ej. mediante el uso de jQuery), debe definir la cabecera añadiendo:

header("Content-type: application/json;charset=utf8"); 
json_encode(
    some_data 
); 

Esto debería hacer el truco

+3

Y, si usará 'PDO', intente esto:' $ db = new PDO ("base de datos", "nombre de usuario", "pase", matriz (PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')) ' –

+3

Simplemente comenten que la función 'mysqli_set_charset (" utf8 ")', necesita dos parámetros, la conexión y el juego de caracteres, por lo que termina como 'mysqli_set_charset ($ conn," utf8 ")'. –

6

La mejor opción es que la conexión de su base de datos no esté codificada en UTF-8; por lo general, es ISO-8859-1 por defecto.

intente enviar una consulta

SET NAMES utf8; 

después de hacer la conexión.

+1

Estaba usando PHP y el comando shell_exec para importar un archivo sql, y esta solución fue la única que funcionó, ¡gracias! – Piero

1

¿Ha revisado http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:

Las aplicaciones cliente que necesitan comunicarse con el servidor utilizando Unicode debe configurar el cliente conjunto de caracteres en consecuencia; para el ejemplo , al emitir una declaración SET NAMES 'utf8' . ucs2 no se puede utilizar como un conjunto de caracteres de cliente , lo que significa que no funciona para SET NAMES o SET CHARACTER SET. (Véase la Sección 9.1.4, “ el conjunto de caracteres de conexión y colaciones”.)

Además de eso:

si recibe datos a través de php de su mysql-db (UTF-todo 8) pero aún así get '?' para algunos caracteres especiales en su navegador(), intente esto:

después mysql_connect(), y mysql_select_db() agregar esta línea: mysql_query ("SET NAMES utf8");

funcionó para mí. Intenté primero con utf8_encode, pero esto solo funcionó para äüöéè ... y así sucesivamente, pero no para caracteres cirílicos y otros caracteres.

0

Es necesario a) asegurarse de que sus mesas están utilizando una codificación de caracteres que puede codificar estos caracteres (UTF-8 tiende a ser la salida al codificar estos días) y b) asegurarse de que sus envíos de formularios son siendo enviado a la base de datos con la misma codificación de caracteres. Para ello, guarde sus archivos HTML/PHP/cualquiera como UTF-8 e incluya una metaetiqueta en el encabezado que le indique al navegador que use la codificación UTF-8.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

Ah, y no se olvide de C, cuando se conecta a la base de datos, asegurarse de que realmente está utilizando el juego de caracteres correcto mediante la ejecución de un NOMBRES SET charset = UTF-8 (no podría ser la sintaxis correcta, yo tendrá que buscar lo que debería ser, pero será a lo largo de esas líneas)

3

si utiliza PDO, debe instanciate así:

new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 
+0

¡Exactamente lo que necesitaba! Muchas gracias :) – Ebpo

1

uso UTF8:

Conjunto una meta i n su

<meta http-equiv="Content-type" content="text/html;charset=utf-8" /> 

Cuando se conecta a su base de datos MySQL, la fuerza de codificación para que no tenga que jugar con la configuración de MySQL

$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.'); 
mysql_select_db('mydb') or die('Could not select database.'); 
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART 

Si utiliza AJAX, conjunto que codifica así:

header('Content-type: text/html; charset=utf-8'); 
+2

Esta extensión fue desaprobada en PHP 5.5.0, y fue eliminada en PHP 7.0.0. –

3

mysqli_set_charset ($ conn, "UTF-8");

0

PHP (.net) aconseja no configurar conjuntos de caracteres después de la conexión con una consulta como SET NAMES utf8 porque su funcionalidad para el escape de datos dentro de las instrucciones MySQL podría no funcionar como se esperaba.

No use SET NAMES utf8, pero use la función ..._ set_charset() (o método) adecuada en su lugar, en caso de que esté usando PHP.

Cuestiones relacionadas