ローカルでこれを行ってデータベースをダンプおよび移動し、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を使用します。私はøæåØÆåの代わりに狂った√∏用船者を取得します。
どこが間違っているのか誰か知っていますか?
これは私のために働いた:
mysqldump -h my_guid.cloud.database.com -u my_user -p my_database_name -r ~/my_db_backup.sql
コンソールがプロンプトを表示してパスワードを要求し、そこに入力できます。私のpwdには特殊文字が含まれていたため、このコマンドを簡単に実行できました。
次のコマンドで実行してみてください。
mysqldump -u root -p database -r output.sql
矢印 '>'で出力をリダイレクトする代わりに
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
これで問題が解決しました。
二重にエンコードされたinput.sqlをインポートします
もう一度エクスポートしますmysqldump -h "$DB_Host -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql
クリーンなoutput.sqlをインポートします
私は次のように成功します:
mysql --default-character-set=utf8 -u ..
これがお役に立てますように。
クライアントがUTF8に設定されていることを確認することは非常に重要です。紛らわしいことに、データベースをUTF8に設定することと同じではありません。 /etc/my.cnfを開き、[mysqld]の下だけでなく[mysql]の下にもdefault-character-set = utf8があることを確認します。
これで、UTF8ダンプをmysqlクライアントに直接パイプできるようになります。また、mysqldumpは完全ではないため、mysqldumpコマンドでオプション--hex-blobを使用することをお勧めします。
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
おそらく、テーブルをlatin1として$ newDatabaseにコピーするだけです。次に、テーブルごとに次を実行します。
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
私にとってうまくいった唯一の方法は、phpmyadminでutf-8テーブルをlatin-1(ファイルの文字セット:iso-8859-1)としてエクスポートすることでした。
エクスポートされたファイルをnotepad ++で開き、UTF8に変換します(BOMを使用)
次に、ファイルをアップロードし、SOURCEdump.sqlを使用してインポートします。