Nuestros mejores programadores han agotado sus provisiones de café, en su búsqueda día y noche por la solución, hasta que Andrea encontró el resultado en Bitbucket y hoy la comparte aquí.
Solución:
Hola intenta lo siguiente.
mysqldump -u [username] –p[password] --default-character-set=utf8 -N --routines --skip-triggers --databases [database_name] > [dump_file.sql]
--default-character-set=utf8
es la opción que buscas la que se puede usar junto con estas otras:
mysqldump --events
--routines
--triggers
--add-drop-database
--compress
--hex-blob
--opt
--skip-comments
--single-transaction
--skip-set-charset
--default-character-set=utf8
--databases dbname > my.dump
Además, verifique el --hex-blob
ayuda a volcar cadenas binarias en formato hexadecimal, por lo que puedo garantizar (ser más portátil) que la importación funcione.
los
--databases
hace que todos los nombres en la línea de comandos se traten como nombres de base de datos. Sin esta opción,mysqldump
trata el primer nombre como un nombre de base de datos y los siguientes como nombres de tabla.Con
--all-databases
o--databases
,mysqldump
escribeCREATE DATABASE
yUSE
declaraciones antes de la salida de volcado para cada base de datos. Esto asegura que cuando se vuelve a cargar el archivo de volcado, crea cada base de datos si no existe y la convierte en la base de datos predeterminada para que los contenidos de la base de datos se carguen en la misma base de datos de la que provienen. Si desea que el archivo de volcado fuerce una eliminación de cada base de datos antes de volver a crearla, utilice también la opción –add-drop-database. En este caso,mysqldump
escribe unDROP DATABASE
declaración que precede a cadaCREATE DATABASE
declaración.
Esto ayuda a restaurar usando:
# mysql < dump.sql
En lugar de:
# mysql dbname < dump.sql
Tuve el problema de que, incluso con las banderas utf-8 aplicadas al crear el volcado, no pude evitar que los caracteres rotos importaran un volcado que se creó a partir de una base de datos con muchas columnas de texto usando latin1. Algunas búsquedas en Google y especialmente este sitio me ayudaron a finalmente resolverlo.
-
mysqldump con --skip-set-charset --default-character-set=latin1 banderas, para evitar el intento de reconversión de MySQL y establecer un conjunto de caracteres.
-
arregla el volcado reemplazando las cadenas del juego de caracteres usando sed en la terminal
sed -i 's/latin1_swedish_ci/utf8mb4/g' mysqlfile.sql
sed -i 's/latin1/utf8mb4/g' mysqlfile.sql
para asegurarse de no perderse nada, puede hacer grep -i 'latin1' mysqlfile.sql antes del paso 2 - y luego generar más órdenes sed. Introducción a sed aquí
-
crear una base de datos limpia
CREAR BASE DE DATOS mydatabase CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-
aplicar volcado fijo