problema de encoding de la base de datos? Comillas dobles y simples que se muestran con signos de interrogación

Servidor antiguo db = MySQL v4.0.21 Nuevo servidor db = MySQL v5.0.45

Estoy moviendo una aplicación a un nuevo servidor y copié en la base de datos.

La aplicación envía una agenda para el día y cada vez que hay comillas dobles y únicas “‘, ¿aparecen como signos de interrogación?

¿Viene así en el servidor en el que se movió ?The Horror of Race: HBO?s True Blood?

Esto es lo que parece en la aplicación de servidor original en la que se creó: “The Horror of Race: HBO's True Blood”

Captura de pantalla de la base de datos w / i phpmyadmin http://grab.by/2EsU (servidor original mysql v4.0.21) y http://grab.by/2EtN (nuevo servidor mysql 5.0.45)

Captura de pantalla de la tabla donde se almacenan los datos: http://grab.by/2Et2 (solo sucede con la columna del cuerpo)

Captura de pantalla de datos dentro de la nueva tabla de servidores: http://grab.by/2Etb (¿notará los signos de interrogación?)

Captura de pantalla de datos dentro de la tabla del servidor original: http://grab.by/2Etl

La aplicación está construida con PHP, e imprime el cuerpo como nl2br($body);

La cadena se almacena con la variable $ body antes de insertarla en la tabla db, así: $body=addslashes($_POST['body']);

¿Alguna ayuda en cuanto a por qué está mostrando el? marcas en lugar de comillas dobles e individuales, serían útiles, muy apreciadas.

Esto es muy probablemente debido a una diferencia en la configuración de encoding de caracteres. Esto puede estar en efecto en un par de lugares. Le aconsejo que inicie sesión en ambos servidores y lo haga:

 mysql> show variables like '%character%'; +--------------------------+-----------------------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | D:\Servers\MySQL\MySQL_5_1_36\share\charsets\ | +--------------------------+-----------------------------------------------+ 8 rows in set (0.00 sec) 

Ve si ves alguna diferencia allí. Por ejemplo, si el conjunto de caracteres de conexión predeterminado es diferente para el nuevo servidor, puede obtener estos resultados.

También debe asegurarse de la configuración de encoding de caracteres para las columnas: haga un SHOW CREATE TABLE y compruebe si los juegos de caracteres siguen siendo los mismos en el nivel de columna mysql>

EDITAR Alternativamente, como señaló Martin en los comentarios, podría tratarse de un volcado de SQL que está codificado en una encoding que no anticipó. Aquí hay más información al respecto: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_default-character-set . En este caso, podría tratar de volver a codificar el archivo de volcado con una herramienta como iconv ( http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html )

Para ser sincero, creo que hay otra pieza del rompecabezas que falta para esta descripción del problema porque todo parece válido. Hay otras dos funciones que puede utilizar para evitar la inyección de SQL que puede resolver su extraño problema.

 $var=addslashes(htmlspeicalchars($var,ENT_QUOTES)); 

o un mejor enfoque:

 $var=mysql_real_escape_string($var);