Pregunta

Ayer estuve escuchando sobre este problema durante unas horas:

Tengo una base de datos en el servidor MySQL 4.1.22 con codificación establecida en " UTF-8 Unicode (utf8) " (según lo informado por phpMyAdmin). Las tablas de esta base de datos tienen un conjunto de caracteres predeterminado establecido en latin2 . Pero, la aplicación web (CMS Made Simple escrito en PHP) que lo usa muestra páginas en utf8 ...

Por muy jodido que pueda ser, en realidad funciona. La aplicación web muestra los caracteres correctamente (se utilizan principalmente checos y polacos).

Ejecuto: " mysqldump -u xxx -p -h aaa nombrebd > dump.sql " ;. Esto me da un script SQL que:

  • se ve perfecto en cualquier editor (como Notepad +) cuando se muestra en UTF-8 : todos los caracteres se muestran correctamente
  • todas las tablas en el script tienen un conjunto de caracteres predeterminado establecido en latin2
  • tiene " / *! 40101 SET NAMES latin2 * /; " línea al principio (entre otras configuraciones)

Ahora, quiero exportar esta base de datos a otro servidor que se ejecute en MySQL 5.0.67, también con la codificación del servidor establecida en " UTF-8 Unicode (utf8) " ;. Copié toda la instalación de CMS Made Simple, copié el script dump.sql y ejecuté & Quot; mysql -h ddd -u zzz -p dbname & Lt; dump.sql " ;. Después de eso, todos los caracteres se mezclan al mostrar las páginas web de CMSMS.

Intenté configurar:
SET character_set_client = utf8;
SET character_set_connection = latin2;

Y todas las combinaciones (solo para estar seguro, incluso si no tiene ningún sentido para mí): latin2 / utf8, latin2 / latin2, utf8 / utf8, etc. - no ayuda. Todos los caracteres siguen codificados, aunque a veces de una manera diferente :).

También intenté reemplazar todas las configuraciones latin2 con utf8 en el script (establecer nombres y caracteres predeterminados para tablas). Nada.

¿Hay algún experto en MySQL aquí que pueda explicar en pocas palabras (estoy seguro de que es simple después de todo) cómo funciona realmente todo este material de codificación? Leí 9.1.4. Conjuntos de caracteres de conexión y colaciones pero no encontró nada útil allí.

Gracias Matt

¿Fue útil?

Solución 2

Ugh ... ok, parece que encontré una solución.

MySQL no es el culpable aquí. Hice un simple volcado y carga ahora, sin cambios en el script dump.sql, lo que significa que dejé & Quot; set names latin2 & Quot; y mesas charsets como estaban. Luego cambié mi instalación CMSMS original a la nueva base de datos y ... funcionó correctamente. Entonces, la codificación en la base de datos está bien, o al menos funciona bien con la instalación de CMSMS que tenía en mi antiguo proveedor de alojamiento (CMSMS aparentemente hace cosas divertidas con la codificación de caracteres ).

Para que funcione en mi nuevo proveedor de alojamiento, tuve que agregar esta línea a lib / adodb / drivers / adodb-mysql.inc.php en la instalación de CMSMS:

mysql_query('set names latin2',$this->_connectionID);

Esta es una solución ligeramente modificada de esta publicación . Puede encontrar la línea exacta allí también. Entonces parece un problema de configuración del cliente mysql.

Otros consejos

¿Intentó agregar la opción --default-character-set = name, así:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

Tuve ese problema antes y funcionó después de usar esa opción.

¡Espero que ayude!

SOLUCIÓN para mí:

establezca esta opción en su archivo php, después de mysql_connect (o después de mysql_select_db ) ..

mysql_query("SET NAMES 'utf8'");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top