Tag Archive for latin1

Solucion definitiva a los problemas con la codificacion en bases de datos MySQL

Hace algun tiempo escribi un articulo en el que narraba mis problemas con wordpress y awardspace y uno de los problemas era que despues de haber restaurado una copia de la base de datos del blog, salian interrogantes en el sitio donde antes iban caracteres acentuados. En ese articulo puse una solucion bastante tediosa pero efectiva, sin embargo, estos dias migre el blog a dreamhost me volvio a pasar lo mismo. Como no estaba dispuesto a volver a hacer todo el curro de antes, decidi romperme mas los cuernos que la otra vez, y ademas esta vez contaba con la posibilidad de toquetear todo lo que quisiera en la copia de wordpress k tenia en dreamhost, ya que si algo cascaba no me quedaba sin blog, cosa que no podia hacer antes al tener alojado el blog unicamente en awardspace.

Bueno, pues despues de trastear un par de horitas, ya encontre el fallo que provoca este problema y por tanto, tambien encontre la solucion ideal. El fallo esta en que al exportar una base de datos (desde phpMyAdmin o usando el plugin Database Backup de wordpress) obtenemos un archivo de texto plano que contiene toda nuestrabase de datos. El problema esta en que este fichero usa la codificacion «latin1» y no «utf8» como seria deseable, por lo tanto al subir la base de datos al servidor mediante phpMyAdmin y usando las opciones por defecto es cuando se corrompen los datos ya que phpMyAdmin espera un archivo de texto codificado en «utf8» y no en «latin1»

Ahora que ya sabemos donde y por que casca, vamos con la solucion, que no podia ser mas sencilla. Nos logueamos en phpMyAdmin para acceder a la base de datos y pulsamos sobre el boton para ejecutar consultas SQL

383055838_65b2abc473_o.png

El la ventana que aparece tenemos dos opciones, abrir el archivo de la base de datos en el bloc de notas y pegar todo su contenido en este cuadro de texto y darle a «Continuar», o sino podemos pulsar sobre «Importar archivos»
383055839_d0b5456f79_o.png

Y nos saldra esta otra ventana donde tenemos que indicar el archivo de base de datos que queremos subir mediante el boton «Examinar» y ademas, LO MAS IMPORTANTE cambiar «utf8» por «latin1» en el cuadro «Juego de caracteres del archivo»

383055841_ed363b6ba2_o.png

Pulsamos sobre «Continuar» y ya esta listo. Si entrais en este momento en el blog vereis que todos los post se ven correctamente. Sin embargo, esta solucion solo es aplicable en el mismo momento en el que se produce el fallo al subir la base de datos y no vale para bases de datos (como la de mi blog) que tengan una parte de los post bien escritos y la otra con fallos. En estos casos usar este metodo lo unico que haria seria poner mal los post que estan bien y bien los que estan mal. Si tienes una base de datos como la mia, mitad con fallos, mitad sin ellos tienes que seguir el tedioso metodo que explique en mi otro articulo. Esto me recuerda que tengo un buen numero de posts antiguos sin actualizar, y que tengo que actualizarlos un dia de estos. O no.

Usando WordPress en Awardspace

Hace un tiempo dije que iba a hablar sobre el problema que tuve con wordpress y su base de datos, asi que empecemos por el principio:

Tras instalar wordpress en mi cuenta de awardspace, todo funcioni bastante bien hasta el dia en que aparecieron comentarios de spam en el blog. El problema no seria de mayor importancia de no ser por que awardspace CENSURA PALABRAS. ¿Que es lo que censura? Pues palabras que suelen estar muy presentes en mensajes de spam o que son usadas en el ambito de la pirateria, y cuando el servidor se encuentra con una pagina que contiene alguna de estas palabras en vez de mostrarla da un error y te redirige a la pagina principal de awardspace. En esta situacion, cada vez que un comentario de spam se colaba en mi blog, el servidor no cargaba las paginas y no se podia entrar. Para solucionar esto, tuve que entrar en phpMyAdmin, el gestor de bases de datos que usa awardspace (y la gran mayoria de hostings) y buscar los comentarios de spam en la tabla wp_comments para borrarlos. Una vez hecho esto el problema parecia solucionado, pero la cosa se complico.

Despues de que uno de mis articulos saliera en meneame.net, vi que a la semana de haber salido no tenia ni un solo comentario en el blog, cosa que me extraño un huevo, porque es casi imposible que nadie comentase nada, asi que entre en el panel de administracion de wordpress y vi que tenia comentarios pendientes de moderacion. Me parecio extrañisimo que estuvieran pendientes de moderacion, porque no le habia indicado a wordpress que filtrase los comentarios, asi que fui a la pestaña de configuracion de las opciones de los comentarios para ver si estaba bien configurado pero… ¡No me cargaba la pagina y me redirigia a la pagina principal de awardspace! En un principio pense que podia ser un caso de censura como me habia pasado con los comentarios de spam, pero lo descarte porque en esa pagina de opciones no habia en principio ninguna palabra censurable por awardspace.

Sin saber que era lo que fallaba hice copia de la base de datos, borre por completo la base de datos instalada en el servidor y restaure la copia de seguridad. Entonces lejos de arreglarse el problema me surgio otro peor: las ñ y las vocales acentuadas habian sido cambiadas por interrogantes. Legados a este punto borre la base de datos y la instalacion de wordpress y volvi a empezar desde cero. Aun asi seguia teniendo el mismo problema con la pagina se las opciones de los comentarios

Tras mucho buscar, encontre la solucion a lo de los comentarios: resulta que una de las palabras que censura awardspace es «p r o x y» (notese que tengo que escribirla con espacios porque sino la censura) y cuando una pagina contiene es u otras palabars que censura, no se muestra la pagina y te redirige a la pagina principal de awardspace. El caso es que el archivo wp-comments.php contenia la palabra «p r o x y», en concreto contenia «open_p:r:o:x:y_check», (sin los : que los pongo pa k no me censure la palabra) asi que cambie esto por «opcheck» en todos los sitios donde salia dentro del archivo. Problema solucionado.

Pero ahora tenia que solucionar tambien el problema de las interrogantes en los post. En la mayoria de las instalaciones de MySQL de los hostings el juego de caracteres por defecto es «latin1» y el cotejamiento en concreto es «latin1_swedish», cuando lo mas correcto es k fuese «utf8_general_ci» que es un cotejamiento que vale para todos los idiomas. El caso es que llegue a la conclusion de que habia que cambiar el juego de caracteres de la base de datos y los contejamientos para que usasen utf8. Buscando por la web encontre unas consultas SQL que hacian esto, y que dejo por aqui

ALTER table wp_categories CONVERT TO CHARACTER SET utf8;
ALTER table wp_comments CONVERT TO CHARACTER SET utf8;
ALTER table wp_linkcategories CONVERT TO CHARACTER SET utf8;
ALTER table wp_links CONVERT TO CHARACTER SET utf8;
ALTER table wp_options CONVERT TO CHARACTER SET utf8;
ALTER table wp_post2cat CONVERT TO CHARACTER SET utf8;
ALTER table wp_postmeta CONVERT TO CHARACTER SET utf8;
ALTER table wp_posts CONVERT TO CHARACTER SET utf8;
ALTER table wp_usermeta CONVERT TO CHARACTER SET utf8;
ALTER table wp_users CONVERT TO CHARACTER SET utf8;

Y con esto tenemos la base de datos lista para usar utf8, lo malo es quue no convierte los post ya escritos a utf8 y por tanto seguiran saliendo caracteres extraños. La ventaja que tiene esto es que los posts nuevo que hagamos si que se veran bien y nos daran menos problemas en el futuro.

Pero seguia teniendo el mismo problema, y por muchos sitios en los que buscaba nunca me daban respuesta a la pregunta de ¿Como cojones convierto un texto en codificacion latin1 a uno en codificacion utf8? Pues esto ultimo tuve que currarmelo yo solo y a base de experimentacion consegui la solucion

OJO QUE ESTA SOLUCION NO SALE EN OTROS BLOGS NI OTRAS PAGINAS:

La situcion es la siguiente: Tenemos una base de datos que usa UTF8 como juego de caracteres y tenemos parte de los posts de la base de datos (los mas recientes) codificados en UTF8 y otra parte (los mas antiguos) codificados en latin1. Lo primero k tenemos que hacer es acceder al gestor de nuestra base de datos (phpMyAdmin seguramente sera el que tengamos) y en la columna de la izquierda pulsamos sobre la tabla «wp_posts» de la base de datos. Luego pulsamos sobre «Examinar» y luego desplegamos la lista de donde pone «Organizar segun clave», seleccionamos «PRIMARY (Descendente)» y pulsamos sobre «Continuar»

338812626_49f15c7977_o.jpg

Lo siguiente es buscar uno de los post que queremos corregir porque se se ven mal en el blog. AQUI HAY QUE TENER CUIDADO porque dependiendo de como este configurado el servidor donde tengais la base de datos, PUEDE QUE LOS POST QUE EN LA PAGINA SE VEN BIEN EN PHPMYADMIN SE VEAN MAL Y VICEVERSA. Una vez k tengamos localizado el post k keremos corregir pulsamos sobre el boton del lapiz para editar el post

Ahora ya podemos editar este post a nuestro gusto. Lo primero sera ir al menu «Ver» de Firefox, seleccionar «Codificacion de caracteres» y cambiar la opcion «UTF-8» que deberia estar marcada por «ISO-8859-1». Veremos entonces que la pagina se recarga y que los caracteres acentuados se ven de manera distinta. Entonces en ese momento copiamos todo el contenido del campo «post_content» y luego vamos otra vez al menu «Ver» y volvemos a marcar «UTF-8» como codificacion a usar. Cuando se recargue la pagina borramos todo el contenido del campo «post_content» y pegamos el texto que habiamos copiado antes. Luego pulsamos sobre el boton «Continuar» de abajo y listo. Dependiendo de si el titulo del post que estas corrigiendo se ve mal o no puede ser necesario que hagas lo mismo para el campo «post_title».
339060254_e3390d7cfd_o.png

Bueno esta es la solucion que encontre. Aunque es algo tediosa, porque tienes que ir modificando los post uno a uno, es mejor que tener que reescribirlos todos desde la interfaz de wordpress y ademas te deja la base de datos bastante limpia.