2011-11-01 26 views
6

Actualmente estoy teniendo problemas para guardar caracteres especiales (® & ©) en una base de datos mySQL.Guardando caracteres especiales en la base de datos MySQL

En una pila local (local en mi máquina de desarrollo) la operación se ejecuta sin problemas y lo que se ingresa en el front-end se guarda como se espera.

Con el mismo código de front-end en el servidor centralizado al guardar en la base de datos, el carácter se continúa con otros caracteres, se guarda como ®. Esto no es un problema cuando se ve el registro en el front-end, ya que invierte lo que hace y muestra correctamente.

El problema proviene de otro sistema separado que utiliza la misma base de datos y no realiza ninguna alteración, por lo que aparece como ® en lugar de simplemente ®.

El motivo de mi confusión es que parece funcionar como se requiere en mi stack local pero no en el servidor centralizado.

Estoy buscando ideas sobre qué buscar que podría estar causando esto en la configuración de los servidores en comparación con mi local.

Gracias de antemano Marcos

+0

se olvidó de agregar el extremo frontal está escrito en PHP. – MarkJWiggins

+1

Comprueba que la codificación predeterminada de php, la codificación de la conexión de mysql y la clasificación de tabla y campo mysql son las mismas. –

+0

+1 Pranav cubre la mayoría de las cosas, sin duda necesita hacer esto. – therobyouknow

Respuesta

1

Después de seleccionar la base de datos de código php añadir lo siguiente:

mysql_query("set names 'utf8'"); 

también comprobar si la columna donde se almacena el texto tiene la codificación UTF-8.

+0

+1 @Soaica Mircea, gracias. Vale la pena considerar para algunos escenarios. Aunque esto puede no ser necesario para el problema original de OP ya que pude reproducir esto y proporcionar una solución sin requerir mysql_query ("set names 'utf8'"); Pero esto puede ser útil para otros escenarios. Gracias de nuevo. – therobyouknow

2

@Pranav Hosangadi (gracias) cubre tres áreas para comprobar la coherencia de la codificación. La siguiente solución se suma a eso. También puede valer la pena considerar (una variación de) la respuesta de @Soaice Mircea (gracias también) para algunos escenarios en los que esta respuesta no soluciona el problema, aunque esto no fue necesario cuando pude reproducir y encontrar una solución a su problema . La línea de pensamiento de @Pranav parece ser exitosa para este problema, ya que se trata de la consistencia del uso de un juego de caracteres en todas partes en lugar de uno en particular.

cinco cosas que hacer:

  1. aseguran conjunto de caracteres base de datos y tablas utilizan mismo juego de caracteres en todo, inspeccionar esto en phpmyadmin por ejemplo, la nota y esto charset para temperaturas inferiores a

  2. uso php header() función con charset base de datos, por ejemplo:

    header('Content-Type: text/html; charset=latin1_swedish_ci');
  3. inserto etiqueta meta en la cabecera de HTML, por ejemplo:

    <meta http-equiv="content-type" 
    content="text/html;charset=latin1_swedish_ci">
  4. añadir charset-acepta en la etiqueta de forma

    <form action=\"testsubmit.php\" method=\"post\" accept-charset=\"latin1_swedish_ci\">
  5. conjunto charset de conexión mysql ej .:

    $con = mysql_connect("localhost","test","test");  
    mysql_set_charset ("latin1_swedish_ci", $con); 
    
+0

Una cosa peculiar observada es que el paso 5 anterior, establecer la conexión mysql, puede no funcionar en otro lugar en el mismo servidor, "" No se puede inicializar el juego de caracteres latin1 "es el mensaje de error visto. También se ve en el software no relacionado aquí: http: //bugs.kde.org/226960 Una sugerencia en esa discusión es: ¿Puede uno de ustedes buscar en/usr/share/mysql/charsets e informar si hay un archivo 'latin1.xml' allí? No dejen que esto se ponga sin embargo, esta respuesta ya que esta podría ser una idiosincrasia aislada de mi configuración. – therobyouknow

Cuestiones relacionadas