MySQL: Buscar y Reemplazar texto con SQL

17 Comments

Hace unos dias atras este blog se mudo de hosting. El cambio se debio a que el server anterior esta saturado por la poblacion de World of Warcraft, asi que es mejor dejarlo exclusivo para chapincraft.

Durante la migracion de los sistemas la instalacion y configuracion del sistema Linux, el web server Lighttpd, MySQL y WordPress fue relativamente sencillo, lo que si fue problematico ha sido la migracion de la base de datos del WP.

Para realizar el backup de la base de datos del blog en wordpress ejecute el comando mysqldump y luego lo subi al nuevo servidor con la misma version de MySQL. El problema es que a pesar que el MySQL tiene la misma codificacion de caracteres, no me esta mostrando las tildes ni las letras ñ (enie). Luego de consultar con los amigos de phpgt alguien me recomendo hacer una busqueda y reemplazo.

Al principio no me parecio muy bien hacer las busquedas sobre el archivo de texto sql. Me parece mas logico hacer una pequeña consulta SQL sobre el servidor de bases de datos, ya que deberia de realizar la consulta mas rapido para solucionar las tildes y caracteres cambiados.

Encontre que existe la instruccion REPLACE en MySQL, asi que manos a la obra.

Reemplazando texto en MySQL

El comando REPLACE tiene una sintaxis sencilla, descrita de la siguiente forma:

UPDATE tabla SET campo = REPLACE(campo,'texto a buscar','nuevo texto');

Asi que utilizando la consulta anterior, podemos personalizarla para nuestro caso y buscar el texto corrupto sobre las tablas que contienen los titulos y articulos en wordpress, post_title y post_content respectivamente:

Reemplazar texto en titulos y contenido de WordPress

Dentro de phpmyadmin podemos ejecutar la siguiente consulta:

update wp_posts set post_title = replace(post_title, 'ñ', 'ñ');
update wp_posts set post_title = replace(post_title, 'á', 'á');
update wp_posts set post_title = replace(post_title, 'ó', 'ó');
update wp_posts set post_title = replace(post_title, 'Ã', 'í');
update wp_posts set post_title = replace(post_title, 'íº', 'ú');
update wp_posts set post_title = replace(post_title, 'í‘', 'Ñ');
update wp_posts set post_title = replace(post_title, 'ú', 'ú');
update wp_posts set post_title = replace(post_title, 'í©', 'é');
update wp_posts set post_title = replace(post_title, '–', '–');
update wp_posts set post_content = replace(post_content, 'ñ', 'ñ');
update wp_posts set post_content = replace(post_content, 'á', 'á');
update wp_posts set post_content = replace(post_content, 'ó', 'ó');
update wp_posts set post_content = replace(post_content, 'Ã', 'í');
update wp_posts set post_content = replace(post_content, 'íº', 'ú');
update wp_posts set post_content = replace(post_content, 'í©', 'é');
update wp_posts set post_content = replace(post_content, 'ú', 'ú');
update wp_posts set post_content = replace(post_content, 'í‘', 'Ñ');

Reemplazar texto en tabla comentarios de wordpress

update wp_comments set comment_content = replace(comment_content, '–', '–');
update wp_comments set comment_content = replace(comment_content, 'ñ', 'ñ');
update wp_comments set comment_content = replace(comment_content, 'á', 'á');
update wp_comments set comment_content = replace(comment_content, 'ó', 'ó');
update wp_comments set comment_content = replace(comment_content, 'Ã', 'í');
update wp_comments set comment_content = replace(comment_content, 'íº', 'ú');
update wp_comments set comment_content = replace(comment_content, 'í©', 'é');
update wp_comments set comment_content = replace(comment_content, 'ú', 'ú');
update wp_comments set comment_content = replace(comment_content, 'í‘', 'Ñ');

update wp_comments set comment_author = replace(comment_author, '–', '–');
update wp_comments set comment_author = replace(comment_author, 'ñ', 'ñ');
update wp_comments set comment_author = replace(comment_author, 'á', 'á');
update wp_comments set comment_author = replace(comment_author, 'ó', 'ó');
update wp_comments set comment_author = replace(comment_author, 'Ã', 'í');
update wp_comments set comment_author = replace(comment_author, 'íº', 'ú');
update wp_comments set comment_author = replace(comment_author, 'í©', 'é');
update wp_comments set comment_author = replace(comment_author, 'ú', 'ú');
update wp_comments set comment_author = replace(comment_author, 'í‘', 'Ñ');

Reemplazo para Yet another related post plugin

update wp_yarpp_keyword_cache set body = replace(body, 'ñ', 'ñ');
update wp_yarpp_keyword_cache set body = replace(body, 'á', 'á');
update wp_yarpp_keyword_cache set body = replace(body, 'ó', 'ó');
update wp_yarpp_keyword_cache set body = replace(body, 'Ã', 'í');
update wp_yarpp_keyword_cache set body = replace(body, 'íº', 'ú');
update wp_yarpp_keyword_cache set body = replace(body, 'í‘', 'Ñ');
update wp_yarpp_keyword_cache set body = replace(body, 'ú', 'ú');
update wp_yarpp_keyword_cache set body = replace(body, 'í©', 'é');
update wp_yarpp_keyword_cache set body = replace(body, '–', '–');

update wp_yarpp_keyword_cache set title = replace(title, '–', '–');
update wp_yarpp_keyword_cache set title = replace(title, 'ñ', 'ñ');
update wp_yarpp_keyword_cache set title = replace(title, 'á', 'á');
update wp_yarpp_keyword_cache set title = replace(title, 'ó', 'ó');
update wp_yarpp_keyword_cache set title = replace(title, 'Ã', 'í');
update wp_yarpp_keyword_cache set title = replace(title, 'íº', 'ú');
update wp_yarpp_keyword_cache set title = replace(title, 'í©', 'é');
update wp_yarpp_keyword_cache set title = replace(title, 'ú', 'ú');
update wp_yarpp_keyword_cache set title = replace(title, 'í‘', 'Ñ');

Por el momento asi me ha funcionado, aun tengo pendiente revisar las tablas de comentarios y agregar aca el codigo SQL. Aca podran encontrar un listado de carácteres ISO 8859-1 Latin-1.

17 Replies to “MySQL: Buscar y Reemplazar texto con SQL”

  1. Gracias por el aporte justo estoy migrando mi blog y esto me ha venido de maravillas. Gracias!

  2. Tio eres dios, esto es justo lo que necesitaba, hasta ya creia que no se podia hacer.

    muchisimas gracias!!

  3. Muy útil especialmente cuando migramos de un wordpress antiguo a una versión tipo 3.0, pues el actualizador de base de datos cambia los acentos por precisamente esos símbolos raros.

    Lanzar la secuencia propuesta deja las cosas en su sitio.

    Grande, me salvaste la vida!

    Jaume

  4. excelente me sirvio de mucho en verdad… ya estaba doliendome la cabeza solo de pensar en cambiar dato por dato de una url perdida en los comentarios,,, tenia k modificar como 300.. me salvaste, saludos…

  5. No te preocupes por contestarme, no habia leido tu post completo, con la sentencia que compartiste: “UPDATE tabla SET campo = REPLACE(campo,’texto a buscar’,’nuevo texto’);” logre hacer todos mis cambios en toda la base de datos.

    Nuevamente Gracias!

    Un post genial el tuyo.

  6. Magnifico tu post, ya pude cambiar todos esos simbolos raros de mis titulos y de mis post pero aun no he podido con las categorias, cual es la sentencia para modificar tambien las categorias?

  7. Gracias por la data.

    Con ese mismo comando se puede reemplazar todo tipo de información dentro de los campos utilizando las consultas de SQL.

    Ejemplo: cambio de ubicación de archivos en un directorio:

    update wp_postmeta set meta_value = replace(meta_value, ‘/wp-content/’, ‘/wordpress/wp-content/’)

    esto reemplaza parte de la vieja ubicación /wp-content/ a donde estaban los archivos por una nueva /wordpress/wp-content/

    Saludos…

  8. Ola!!

    Mil gracias, después de la mudanza de WP estaba volviéndose un infierno lidiar con enlaces rotos… ésto lo arregló!!

    Un abrazo

  9. Muchas gracias, he buscado este tema desde el inicio de los tiempos, abusando de tu gentileza, me podrias decir, por favor, las equivalencias de las mayusculas:

    Á É Í Ó Ú

    Gracias

  10. Hola,
    Gracias por el tuto, me sirvió para otra cosa, pero igual gracias, sin embargo el problema que tuviste tenía una solución más simple… prueba cambiando la codificación del archivo sql del backup… la mayoría de los editores PRO te permiten seleccionar la codificación del archivo al guardarlo… por lo general sirve a la primera si lo guardas como iso-8859-1, sino UTF-8… esta es la codificación de archivo en sí, es independiente a la codificación con la que genera el archivo el servidor… muchas veces el sistema operativo cambia esa codificación, sobre todo si tocaste el archivo con notepad de Windows, que no respeta la codificación original del archivo.
    Saludos.

  11. ah y te falto la é !

    QUE ME IMAGINO ES:
    update wp_posts set post_title = replace(post_title, ‘í©’, ‘é’);
    update wp_posts set post_content = replace(post_content, ‘í©’, ‘é’);

    ya mismo la consulto 😀 😀 😀 😀

  12. OYE!!!!!!!!!!!!!

    NO SOY CODDER NI NADA DE ESO, SOLO UN OLDSCHOOL WEBMASTER, Y LUEGO DE INVESTIGAR MUCHISISISIMO ACERCA DE TODOS ESTOS CAMBIOS Y TRASPASOS DE DATABASES Y SUS COALICIONES Y CHARSETS….

    Simplemente se me ocurria al no ver ninguna solucion efectiva al seguir miles de fixes, que lo mejor era dejar quietos los charsets convertidos en todas partes para no ir a fallar y claro, pues convertir los malos caracteres SIN HACERLO MANUALMENTE como decian en muchas partes que era la unica opcion, y creelo luego de muchisisiismas lecturas, codex, foros, google, mysql PAGINAS, di con esta maravillosa consultaaaaa!!!

    TE AMOOOOOOOOOOOOOO JAJAJAJAJA!

    Me gustaria conocer el resto de la solucion para los comments hermano,

    Saludos desde Colombia

Deja tus preguntas o comentarios