mysqldump et restaurer avec des caractères spéciaux. øæåØÆÅ
-
01-10-2019 - |
Question
Localement, je le fais pour vider et déplacer une base de données, la mise à niveau Silverstripe 02.03 à 02.04:
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;
Et cela fonctionne, mais sur le serveur Ubuntu 8.04, avec mysql Ver 14,12 Distrib 5.0.51a. Je reçois des affréteurs v? fous au lieu de øæåØÆå.
Quelqu'un sait où je suis allé mal?
La solution 3
Ce résolu le problème pour moi.
-
Importer la double codé input.sql
-
Exporter à nouveau
mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql
-
propre importation output.sql
Comment restaurer la base de données à double codée par mysqldump
Autres conseils
Essayez d'exécuter la commande suivante:
mysqldump -u root -p database -r output.sql
au lieu de réorienter la sortie avec la flèche '>'
Il m'a fallu deux jours pour découvrir J'ai eu le même problème et l'a résolu en essayant d'exporter une base de données en arabe avec mysqldump et chaque fois que vous ouvrez le outputfile dans notepad ++ son encodage est ansi et vous avez besoin pour être utf-8 mon code pour l'exportation et l'importation était comme suit il se trouve que j'avais raison, mais je vérifiais la base de données sur le terminal, mais le terminal ne supporte pas l'encodage et je viens de vérifier essayé avec phpMyAdmin et son bon ne pas essayer d'ouvrir le fichier dans notepad ++ ou tout simplement essayer votre application directement cela fonctionnera.
commande export
mysqldump -uuser -ppassword --default-character-set=utf8 dbname > outputfile //or even if you use -r instead of > no difference
commande import
mysql -uuser -ppassword --default-character-set=utf8 dbname < outputfille // please take in mind this does override existing database
Il est très important de vous assurer que le client est réglé sur UTF8. Pour compliquer les choses, ce n'est pas la même chose que la configuration de votre base de données UTF8. Ouvrez /etc/my.cnf et assurez-vous que vous avez par défaut-character-set = UTF8 sous [MySQL] pas seulement sous [mysqld]
Maintenant, vous devriez être en mesure de tuyau UTF8 dépotoirs directement dans le client mysql. Je recommande également d'utiliser l'option --hex-blob sur la commande mysqldump comme mysqldump est pas parfait.
je réussis comme suit :
mysql --default-character-set=utf8 -u ..
Mai cela vous aidera.
Avez-vous essayé sans l'étape de iconv
?
Voici ce que j'utilise quand le dumping des bases de données UTF-8:
mysqldump \
-u $DB_USER -p"$DB_PASS" \
--default-character-set=Latin1 \
--result-file=$DATAFILE
Et pour restaurer:
mysql -u $DB_USER -p"$DB_PASS" \
--default-character-set=latin1 < $DATAFILE
Peut-être juste copier les tables à $ newdatabase comme latin1. Ensuite, pour chaque table, exécutez:
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
Seule façon qui a fonctionné pour moi était d'exporter les tables de UTF-8 latin-1 (jeu de caractères de fichier: ISO-8859-1). PhpMyAdmin
Ouvrez le fichier exporté dans notepad ++ converti en UTF8 (avec BOM)
Ensuite, téléchargez le fichier et l'importation avec SOURCE dump.sql.
Cela a fonctionné pour moi:
- ssh le serveur et connectez-vous.
- créer en cours d'exécution db décharge
mysqldump -h my_guid.cloud.database.com -u my_user -p my_database_name -r ~/my_db_backup.sql
La console invite et demandera le mot de passe et là vous pouvez taper, mon PWD avait des caractères spéciaux, donc je suis en mesure d'exécuter cette commande avec facilité