utf8_decode utf8 convert cambiar php mysql iso-8859-1

php - convert - utf8_decode mysql



MySQL-Convierta caracteres latin1 en una tabla UTF8 en UTF8 (3)

Solo hoy me di cuenta de que me faltaba esto en mis scripts PHP:

mysql_set_charset(''utf8'');

Todas mis tablas son InnoDB, la intercalación "utf8_unicode_ci", y todas mis columnas VARCHAR son "utf8_unicode_ci" también. Tengo mb_internal_encoding(''UTF-8''); en mis scripts PHP, y todos mis archivos PHP están codificados como UTF-8.

Entonces, hasta ahora, cada vez que "INSERTO" algo con diacríticos, ejemplo:

mysql_query(''INSERT INTO `table` SET `name`="Jáuò Iñe"'');

El contenido del ''nombre'' sería, en este caso: Jáuò Iñe .

Desde que arreglé el juego de caracteres entre PHP y MySQL, ahora los INSERT nuevos se almacenan correctamente. Sin embargo, quiero arreglar todas las filas antiguas que están "en mal estado" en este momento. Intenté muchas cosas ya, pero siempre rompe las cadenas en el primer personaje "ilegal". Aquí está mi código actual:

$m = mysql_real_escape_string(''¿<?php echo "¬<b>/'PHP &aacute; (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;''); mysql_set_charset(''utf8''); mysql_query(''INSERT INTO `table` SET `name`="''.$m.''"''); mysql_set_charset(''latin1''); mysql_query(''INSERT INTO `table` SET `name`="''.$m.''"''); mysql_set_charset(''utf8''); $result = mysql_iquery(''SELECT * FROM `table`''); while ($row = mysql_fetch_assoc($result)) { $message = $row[''name'']; $message = mb_convert_encoding($message, ''ISO-8859-15'', ''UTF-8''); //$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message); mysql_iquery(''UPDATE `table` SET `name`="''.mysql_real_escape_string($message).''" WHERE `a1`="''.$row[''a1''].''"''); }

Se "ACTUALIZA" con los caracteres esperados, excepto que la cadena se trunca después del carácter "ă". Quiero decir, ese personaje y los siguientes caracteres no están incluidos en la cadena.

Además, probar con el "iconv ()" (que se comenta en el código) hace lo mismo, incluso con // IGNORE y // TRANSLIT

También probé varios conjuntos de caracteres, entre ISO-8859-1 e ISO-8859-15.

¡Realmente necesito ayuda aqui! Gracias.


Después de buscar alrededor de una o dos horas para esta respuesta. Necesitaba migrar un antiguo tt_news db de un error tipográfico a una nueva versión de typo3. Ya intenté convertir el juego de caracteres en el archivo de exportación e importarlo de nuevo, pero no lo pude hacer funcionar.

Luego probé la respuesta anterior de ABS y comencé una actualización en la tabla:

UPDATE tt_news SET title=convert(cast(convert(title using latin1) as binary) using utf8), short=convert(cast(convert(short using latin1) as binary) using utf8), bodytext=convert(cast(convert(bodytext using latin1) as binary) using utf8) WHERE 1

También puede convertir imagecaption, imagealttext, imagetitletext y palabras clave si es necesario. Espero que esto ayude a alguien a migrar tt_news a la nueva versión de typo3.


Según lo que describes, parece que tienes datos UTF-8 que originalmente se almacenaron como Latin-1 y luego no se convirtieron correctamente a UTF-8. Los datos son recuperables; necesitarás una función MySQL como

convert(cast(convert(name using latin1) as binary) using utf8)

Es posible que deba omitir la conversión interna, según cómo se alteraron los datos durante la conversión de la codificación.


la forma es mejor manera de usar la conexión remolque su base de datos normal

a continuación, utilice este código para hacer lo que necesita debe hacer su codificación de página utf-8 por meta en el código de bacalao html (no olvide esto)

luego usa este código

$result = mysql_query(''SELECT * FROM shops''); while ($row = mysql_fetch_assoc($ $name= iconv("windows-1256", "UTF-8", $row[''name'']); mysql_query("SET NAMES ''utf8''"); mysql_query("update `shops` SET `name`=''".$name."'' where ID=''$row[ID]'' "); }