2010-01-27 17 views

Respuesta

12
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql 
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql 
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;" 
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql 
+9

Y es de esperar que su base de datos no contiene “latin1” dentro de cualquiera de los contenidos, tales como entradas de blog acerca de la codificación de caracteres ... de lo contrario sus usuarios pueden tener motivos para una demanda si su sitio web de conversión posterior de repente ofrece comandos de base de datos erróneos. –

+0

después del sed: uconv --desde el código latin1 --to-code utf8 dump_utf.sql> dump_utf_fixed.sql – scribe

+0

¿Qué es SED ????? – marcolopes

37

Para la mesa sola puede hacer algo como esto:

ALTER TABLE pestaña CONVERSIÓN A CARACTERES utf8 COLLATE utf8_unicode_ci;

Para toda la base de datos no sé otro método distinto similar a esto:

http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8

+18

Para aquellos sin acceso a la línea de comando, puede ejecutar rápidamente 'MOSTRAR TABLAS;' en su base de datos, pegarlas en NimbleText en http://nimbletext.com/live y luego usar este patrón para generar el script de cambio: 'ALTER TABLE \ '$ 0 \' CONVERTIR AL CONJUNTO DE CARACTERES utf8 COLLATE utf8_unicode_ci; ' – jocull

+0

Creo que ese consejo sobre el nimbletext salva algunas vidas. ¡Vota arriba! – James

-1

reemplazar my_database_name con su nombre de base de datos

SELECT CONCAT ('ALTER TABLE', TABLE_NAME ' CONVERTIR AL CONJURTO DE CARACTERES utf8 COLLATE utf8_unicode_ci; ') FROM information_schema.TABLES WHERE TABLE_SCHEMA =' my_database_name ';

esto va a construir una gran cantidad de consultas que puede ejecutar

Cuestiones relacionadas