2010-08-27 13 views
11

localmente que hacer esto para volcar y mover una base de datos, actualizar SilverStripe 2.3 a 2.4:mysqldump y restaurar con caracteres especiales. øæåØÆÅ

mysqldump --opt --default-character-set=latin1 --skip-set-charset --user=$root -p$password $oldDatabase -r db.sql 

iconv -f LATIN1 -t UTF8 db.sql > db_utf.sql 


CREATE DATABASE $newDatabase CHARACTER SET utf8 COLLATE utf8_swedish_ci; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON $newDatabase . * TO '$newUser'@'localhost'; FLUSH PRIVILEGES; 
SET NAMES utf8; SOURCE db_utf.sql; 

Y funciona, pero en el servidor de Ubuntu 8.04, con MySQL 5.0.51a Ver 14,12 Distrib. Me vuelvo loco √Π fletadores en lugar de øæåØÆå.

¿Alguien sabe dónde me he equivocado?

+0

SOLUCIÓN se puede encontrar aquí: http://stackoverflow.com/questions/152288/loading-utf-8-encoded-dump-into-mysql/ Como muchos de nosotros, utilice los comandos **. Php ** para hacer una copia de seguridad, , es posible que no pueda exportar correctamente la base de datos con los datos UTF8. entonces, el problema es que necesita usar 'mysql_query (" SET NAMES 'utf8' ");' después de mysql_connect –

Respuesta

1

Esto ha solucionado el problema para mí.

  1. Importe la entrada codificada doble.sql

  2. Exportación de nuevo mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql

  3. importación output.sql limpia

How to restore the database double encoded by mysqldump

0

¿Lo ha intentado sin el paso iconv?

Esto es lo que uso cuando vertimiento UTF-8 bases de datos:

mysqldump \ 
    -u $DB_USER -p"$DB_PASS" \ 
    --default-character-set=Latin1 \ 
    --result-file=$DATAFILE 

Y para restaurar:

mysql -u $DB_USER -p"$DB_PASS" \ 
    --default-character-set=latin1 < $DATAFILE 
+0

¡Los caracteres aún asimétricos están en el archivo db.sql! Ã donde å debería estar. –

+0

parece que esta puede ser la respuesta: http://www.vierundsechzig.de/blog/?p=323 –

+0

O no, estoy tan perdido. –

1

Tal vez simplemente copiar las tablas a $ NewDatabase como latin1. Entonces, para cada tabla, ejecute:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci 
+0

He estado mirando el mysqldump y no importa qué conjunto de caracteres predeterminado use, obtengo letras codificadas: Ã. Pero si miro los mismos datos en mysql las letras están bien ø; Entonces, el problema es sacar los datos, no ponerlos. –

+0

¿Puedes detener mysql temporalmente con 'sudo invoke-rc.d mysql stop'? ¿O estás en algún servidor de producción que no debe detenerse? Si puede detener mysql, puede copiar directamente la base de datos en/var/lib/mysql. Una vez que hayas hecho una copia de seguridad, reinicia mysql con 'sudo invoke-rc.d mysql start' y luego quizás puedas probar el comando' ALTER TABLE' de arriba directamente en las tablas de la base de datos actual. Debería convertirte a utf8 sin usar 'mysqldump'. – unutbu

+0

tal vez la mejor solución, gracias. –

14

intenta ejecutar el siguiente comando:

mysqldump -u root -p database -r output.sql 

lugar de redirigir la salida con la flecha '>'

+0

Gracias ese consejo en realidad resuelve mi problema. – alexsuslin

1

Es muy importante hacer Asegúrese de que el cliente esté configurado en UTF8. Confusamente, no es lo mismo que configurar tu base de datos en UTF8. Abra /etc/my.cnf y asegúrese de tener default-character-set = utf8 en [mysql] no solo debajo de [mysqld]

Ahora debería poder canalizar los volcados UTF8 directamente en el cliente mysql. También recomiendo usar la opción --hex-blob en el comando mysqldump ya que mysqldump no es perfecto.

+0

** Si no está de acuerdo con esto, por favor comenten –

6

Me llevó dos días para averiguar que tenía el mismo problema y lo resolvió cuando se trata de exportar una base de datos en árabe usando mysqldump y cada vez que abra la outputfile en Notepad ++ su codificación es en ANSI y que lo necesitan para ser utf-8 mi código de exportación e importación fue el siguiente, resultó que tenía razón, pero estaba revisando la base de datos en la terminal, pero la terminal no es compatible con la codificación y solo intenté comprobarlo con phpmyadmin y es bueno no Intentar abrir el archivo en el bloc de notas ++ o simplemente probar su aplicación directamente, funcionará.

comando de exportación

mysqldump -uuser -ppassword --default-character-set=utf8 dbname > outputfile //or even if you use -r instead of > no difference

comando de importación mysql -uuser -ppassword --default-character-set=utf8 dbname < outputfille // please take in mind this does override existing database

+0

no lo he probado, pero se ve bien –

+0

Pruébalo, tuve el mismo problema, si no funciona, déjame ahora, cuando lo haga marque esto como la respuesta correcta – Bakly

+1

'--default-character-set = utf- 8' debe ser '--default-character-set utf8' y' --default = character-set = utf-8' debe ser '--default-character-set utf8' –

3

tengo éxito de la siguiente manera:

mysql --default-character-set=utf8 -u .. 

Que esto te ayude.

Cuestiones relacionadas