2011-07-11 74 views
8

Tengo una base de datos llena de valores como ♥•â—♥ Dhaka ♥•â—♥ (que debería ser) ya que no especificó la intercalación mientras creaba la base de datos.
Ahora quiero arreglarlo. No puedo recuperar los datos de donde los obtuve en primer lugar. Así que estaba pensando si sería posible buscar los datos en un script php y convertirlos a los caracteres correctos.
He cambiado la intercalación de la base de datos y los campos a utf8_general_ci ..Conversión de latin1_swedish_ci a utf8 con PHP

+0

¿cómo puedo obtener el texto original de â ™ ¥ â â ¢ â-â ™ ¥? –

Respuesta

14

La intercalación NO es la misma que el juego de caracteres. La intercalación solo se usa para ordenar y comparar texto (por eso hay un término de idioma allí). El conjunto de caracteres real puede ser diferente.

La falla más común no está en la base de datos sino en la conexión entre PHP y MySQL. El juego de caracteres predeterminado para la conexión suele ser ISO-8859-1. Debe cambiar eso lo primero que haga después de connectiong, utilizando la consulta SQL SET NAMES 'utf-8'; o la función mysql_set_charset.

También verifique el conjunto de caracteres de sus tablas. También puede estar mal si no ha especificado UTF-8 para empezar (una vez más: esto no es lo mismo que la intercalación). Pero asegúrese de hacer una copia de seguridad antes de cambiar algo aquí. MySQL intentará convertir el juego de caracteres del anterior, por lo que puede necesitar volver a cargar los datos de la copia de seguridad si ha guardado datos UTF-8 en tablas ISO-8859-1.

+0

Ok. ¿Estos caracteres '♥ ● ● ♥' se guardarán exactamente así en el conjunto de caracteres 'utf8_general_ci'? ¿Y cómo sé qué juego de caracteres se utilizó cuando se guardaron estos caracteres 'â ™ ¥ â-¢ â-¥'? –

+1

utf8_general_ci no es un conjunto de caracteres, es una intercalación. El juego de caracteres real se llama utf-8 y es otra propiedad de la tabla. utf-8 puede codificar la mayoría de los caracteres existentes, por lo que sí (de hecho, SO usa UTF-8 por lo que no podría mostrarme los caracteres si la respuesta a su pregunta era "no"). En cuanto a la segunda pregunta, comience por verificar qué juego de caracteres tenía su mesa y la conexión cuando guardó el texto. –

+0

Gracias. Lo estoy obteniendo ahora. :) Configurar mysql_set_charset a utf8 ayuda a las nuevas entradas. Mirando los otros detalles. :) –

2

Me gustaría ver en mb_detect_encoding() y mb_convert_encoding() y ver si pueden ayudarte.

+0

Cuando estoy usando mb_detect_encoding en 'â ™ ¥ â-â ™ ¥ Dhaka â ™ ¥ â-â ™ ¥' y '♥ ● ● ♥', en ambos casos se dice que es UTF- 8. ¿Ahora qué hacer? –

+1

Suena como un problema de codificación roto. Lea esto: http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding – AlienWebguy