2010-10-04 16 views
9

¿Cómo puedo evitar que mysql convierta ' en ’ cuando hago una inserción?Mysql se convierte en '?

Creo que tiene algo que ver con charset o algo así?

Estoy usando php para hacer el mysql_insert.

+1

Esto tiene que ver con conjuntos de caracteres. ¿Cómo insertas/recuperas datos, es decir, qué biblioteca y lenguaje de programación (o probablemente ORM) estás usando? – AndiDog

+0

¿Qué juego de caracteres es su base de datos? – RobertPitt

+1

Sí, tiene que ver con el juego de caracteres. Compruebe el juego de caracteres de la tabla y en su cadena de conexión. Use la codificación correcta o unicode/utf. – codymanix

Respuesta

13

La comilla simple informados se llama un 'acute accent', que a menudo se convierte de la comilla simple genérica por algunas aplicaciones web. Es un carácter UTF8, que cuando se inserta en una base de datos Latin-1 se traduce en '' ''. Esto significa que debe cambiar el conjunto de caracteres de MySQL al UTF8, o alternativamente cambiar el juego de caracteres de su sitio web al Latin-1.El primero sería preferible:

ALTER DATABASE YourDatabase CHARACTER SET utf8; 
ALTER TABLE YourTableOne CONVERT TO CHARACTER SET utf8; 
ALTER TABLE YourTableTwo CONVERT TO CHARACTER SET utf8; 
... 
ALTER TABLE YourTableN CONVERT TO CHARACTER SET utf8; 
+0

Hice esto y ahora la tabla es utf8_general_ci pero sigo teniendo el mismo problema? – Hailwood

+0

Está efectuando el '' ' – Hailwood

+1

@Hailwood: también debe verificar la codificación de la conexión. – AndiDog

0

Quizás alguien sepa la respuesta de inmediato, pero yo no. Sin embargo aquí hay algunas sugerencias sobre lo que debe examinar (y posiblemente ampliar la pregunta sobre)

Cuando se trata de codificaciones y escapar debe incluir el historial completo de los datos

  • ¿Cómo se creó
  • lo sucedió antes del problema (¿tuvo que pasar por copia de seguridad, correo electrónico, se creó en un servidor diferente, sistema operativo, etc., si se transfirió, entonces ¿era como archivo de texto?)

Lo anterior es porque todo lo que escribe en un archivo de texto (navegador, cliente mysql, servidor web, aplicación php, por nombrar algunas capas que podrían haberlo hecho) pueden estropear la codificación de caracteres.

Para solucionar, puede comenzar a eliminar, y por lo tanto el primer paso (en mi libro), es

  1. conectar con el servidor MySQL usando el cliente de línea de comandos de MySQL.
  2. comprobar la salida de SHOW VARIABLES LIKE 'character_set%'
    (lo que incluso en este sencillo entorno que tiene 7 valores que pueden influir en cómo se analiza los datos, almacenados y/o visualiza
  3. inspeccionar SHOW CREATE TABLE TableName, y buscar juego de caracteres y la información de cotejo, tanto predeterminado para la tabla y definición explícita en las columnas

Habiendo dicho todo lo anterior, no creo que ninguna secuencia de comandos occidental transcodifique un carácter de comilla simple. Por lo tanto, es posible que tenga que ver su escape y otros procesos de datos

EDITAR La mayor parte de lo anterior, de la respuesta y discusión here

1

Esto es lo que he hecho, y funcionó para mí:

  1. primer lugar, asegúrese de que la columna que contiene 'es utf8_general_ci

  2. A continuación, añadir la mysql_set_charset a su código

    $db=mysql_connect("localhost", $your_username, $your_password); 
    mysql_set_charset('utf8',$db); 
    mysql_select_db($your_db_name, $db); 
    
+0

también funcionó para mí :) gracias –

Cuestiones relacionadas