Vía nulleando.com.ar nos llega un útil tip para convertir el charset de una base de datos MySQL sin perder (ni cambiar) información.
El procedimiento será el siguiente:
- Exportar la base de datos actual (la que tiene el charset latin) en un archivo plano (dump file)
- Crear una base de datos con charset utf8
- Modificar lo caracteres del “dump file” de latin a utf8
- Modificar en el “dump file”, CHARSET=latin1 por CHARSET=utf8
- Importar el “dump file”
Para exportar la base de datos actual, utilizamos el conocido mysqldump:
mysqldump -u mi_usuario -p base_de_datos –default-character-set=latin1 > backup.sql
Abrimos el cliente de línea de comandos de MySQL:
mysql -u mi_usuario -p
Y creamos una nueva base de datos con el set de caracteres utf8:
CREATE DATABASE db_destino CHARACTER SET utf8 COLLATE utf8_general_ci;
Mediante iconv, convertimos el set de caracteres del archivo backup.sql generado anteriormete:
iconv -f ISO-8859-1 -t UTF-8 backup.sql > backup_utf8.sql
Modificamos, en el archivo de backup, todas las referencias a CHARSET=latin1 por CHARSET=utf8. Esto lo puedes hacer desde cualquier editor de texto (mediante Search and Replace) o con Perl:
perl -pi -w -e ‘s/CHARSET=latin1/CHARSET=utf8/g;’ backup_utf8.sql
Finalmente, importamos a la nueva base de datos, creada con anterioridad, el archivo de backup modificado a utf8:
mysql -u mi_usuario -p db_destino –default-character-set=utf8 < backup_utf8.sql
Vía: nulleando.com.ar




joryx
agosto 19, 2008
Pero que hago con una base de datos de 50 megas que esta en linea, y no puedo andar jugando con ella como si nada, je je, seguiré buscando…
Luciano
agosto 19, 2008
Inevitablemente esta solución involucra tiempos muertos hasta crear de nuevo la base de datos (o la tabla si hacemos un trabajo más fino).
Un servidor dedicado hace un dump de una base de datos de 300Mb en poco más de tres minutos y si se hace el trabajo delicadamente tabla por tabla (en vez de seleccionar toda la base de datos) se podrían lograr tiempos casi imperceptibles.
tomas
septiembre 26, 2008
entiendo casi todos lo puntos el unico q no entendi fue este
Mediante iconv, convertimos el set de caracteres del archivo backup.sql generado anteriormete:
iconv -f ISO-8859-1 -t UTF-8 backup.sql > backup_utf8.sql
como hago ese punto con iconv? desde el link de iconv q pones? o q?
espero q me ayudes gracias
Luciano
septiembre 26, 2008
Hola Tomas!
Tienes que ejecutar desde una consola (terminal) el comando iconv con los argumentos en cuestión “-f ISO-8859-1 -t UTF-8 backup.sql > backup_utf8.sql”
$ iconv -f ISO-8859-1 -t UTF-8 backup.sql > backup_utf8.sql
Donde, backup.sql es el archivo origen (generado con mysqldum) y backup_utf8.sql es el archivo resultante.
tomas
septiembre 26, 2008
si, gracias el problema esque yo, hace poquito usaba linux pero soy novato en linux lo use al rededor de 120 dias pero luego le volvi q quitar me quede con windows por la facilidad de uso ademas q lo eh usado desde pequeño…..
ahora la pregunta esque desde windows como hago el comando? gracias
tomas
septiembre 26, 2008
no mira me auto respondo se necesita una utilidad q se llama libiconv se consigue aqui
http://gnuwin32.sourceforge.net/packages/libiconv.htm
esto sirve para windows, para usuarios de windows, tambien explico q para hacer lo del replacer de latin1 a utf8 pueden usar dreamwaver o un bloc de notas para cambiar todo lo q dice CHARSET=latin1 por CHARSET=utf8, y por ultimo para exportar el archivo dump al pc es con solo entrar a phpmyadmin y undirle exportar y selccionas tu bd y listo! espero q te ayude a ti tambien luciano por q si tienes usuarios windows…si por alguna otra razon vuelvo y te cuento
salu2
Martin
octubre 27, 2008
Muy buen ejemplo…
chas gracias !!!!
Marcos
febrero 28, 2009
Gracias…
Me sirvio n, ya que estaba guardando unas coordenadas de Google Map y no sabia porque me redondeaba los numeros
el problema era por el charset de la base que estaba en latin1