web-dev-qa-db-ja.com

mysqldumpと特殊文字を使用した復元。 øæåØÆÅ

ローカルでこれを行ってデータベースをダンプおよび移動し、silverstripe2.3を2.4にアップグレードします。

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;

そしてそれは動作しますが、サーバーUbuntu 8.04では、mysql Ver 14.12 Distrib5.0.51aを使用します。私はøæåØÆåの代わりに狂った√∏用船者を取得します。

どこが間違っているのか誰か知っていますか?

15
Mario Michelli

これは私のために働いた:

  1. サーバーをsshして接続します。
  2. 実行中のデータベースダンプの作成

mysqldump -h my_guid.cloud.database.com -u my_user -p my_database_name -r ~/my_db_backup.sql

コンソールがプロンプトを表示してパスワードを要求し、そこに入力できます。私のpwdには特殊文字が含まれていたため、このコマンドを簡単に実行できました。

0
d1jhoni1b

次のコマンドで実行してみてください。

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

矢印 '>'で出力をリダイレクトする代わりに

19
user614467

Mysqldumpを使用してアラビア語でデータベースをエクスポートしようとしたときに同じ問題が発生して解決したことを確認するのに2日かかりました。また、notepad ++で出力ファイルを開くたびに、そのエンコーディングはansiであり、utf-8である必要があります。エクスポートとインポートのコードは次のとおりです。正しいことがわかりましたが、ターミナルでデータベースをチェックしていましたが、ターミナルはエンコードをサポートしていません。phpmyadminでチェックしようとしましたが、ファイルを開こうとしないでください。 notepad ++で、またはアプリケーションを直接試してみてください。

エクスポートコマンド

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

インポートコマンドmysql -uuser -ppassword --default-character-set=utf8 dbname < outputfille // please take in mind this does override existing database

9
Bakly

これで問題が解決しました。

  1. 二重にエンコードされたinput.sqlをインポートします

  2. もう一度エクスポートします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. クリーンなoutput.sqlをインポートします

mysqldumpによって二重にエンコードされたデータベースを復元する方法

4
Mario Michelli

私は次のように成功します

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

これがお役に立てますように。

3
Sean

クライアントがUTF8に設定されていることを確認することは非常に重要です。紛らわしいことに、データベースをUTF8に設定することと同じではありません。 /etc/my.cnfを開き、[mysqld]の下だけでなく[mysql]の下にもdefault-character-set = utf8があることを確認します。

これで、UTF8ダンプをmysqlクライアントに直接パイプできるようになります。また、mysqldumpは完全ではないため、mysqldumpコマンドでオプション--hex-blobを使用することをお勧めします。

3
thomas-peter

iconvステップなしで試してみましたか?

UTF-8データベースをダンプするときに使用するものは次のとおりです。

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

そして復元するには:

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

おそらく、テーブルをlatin1として$ newDatabaseにコピーするだけです。次に、テーブルごとに次を実行します。

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
1
unutbu

私にとってうまくいった唯一の方法は、phpmyadminでutf-8テーブルをlatin-1(ファイルの文字セット:iso-8859-1)としてエクスポートすることでした。

エクスポートされたファイルをnotepad ++で開き、UTF8に変換します(BOMを使用)

次に、ファイルをアップロードし、SOURCEdump.sqlを使用してインポートします。

1
Erik Höglund