web-dev-qa-db-ja.com

MySQLデータベースをラテン語からUTF-8に変換します

WebサイトをISOからUTF-8に変換しているので、MySQLデータベースも変換する必要があります。

インターネットでいろいろな解決策を読んでいますが、どれを選べばいいのかわかりません。

Varchar列をバイナリに変換してから、次のようにUTF-8に変換する必要がありますか?

ALTER TABLE t MODIFY col BINARY(150);
ALTER TABLE t MODIFY col CHAR(150) CHARACTER SET utf8;

各データベースの各列、各テーブル、各列に対してこれを行うには長い時間がかかります。

私は10個のデータベースを持ち、それぞれ20個のテーブルがあり、約2〜3個のvarchar列(各列に2個のクエリ)があります。これにより、約1000個のクエリを書き込む!どうやってするの?

解決済み:使用したコードを投稿します:

PASSWORD=""
db=$1

mysqldump --password=$PASSWORD --set-charset --skip-set-charset --add-drop-table --databases "$db" > /home/dev/backup/bdd.sql

QUERY="ALTER DATABASE \`$db\` DEFAULT CHARACTER SET utf8;"
mysql --password=$PASSWORD --database "$db" -e "$QUERY"

mysql --password=$PASSWORD --default-character-set=utf8 < /home/dev/backup/bdd.sql

詳細については、以下の回答を参照してください。

27
Matthieu Napoli

ダンプを使用すると、これを非常に簡単に行うことができます。を使用してダンプを作成します

mysqldump --skip-opt --set-charset --skip-set-charset 

次に、別のデータベースを作成し、デフォルトの文字セットをUTF-8に設定してから、次のコマンドでダンプをロードし直します。

mysql --default-character-set=<your iso encoding>

主なアイデアは、データエンコーディングの兆候なしにダンプを作成することです。
したがって、作成時に、テーブルのエンコーディングはデータベースエンコーディングから継承され、UTF-8に設定されます。そして--default-character-setデータを自動的に再コード化するようにMySQLに指示します。

19

Mysqldump Ver 10.11 Distrib5.0.77を使用しています

何らかの理由で、オプションEngineとauto_incrementの作成が省略されました。 auto_incrementが主キーフィールドでなくなったため、これにより多くの挿入エラーが発生しました。

これは私のために働いた。 --optを使用し、sedを使用してSQLファイルから文字セットを削除しています。

mysqldump -p --opt --skip-set-charset --add-drop-table dbname > /tmp/dbname.sql
sed -i 's/DEFAULT CHARSET=latin1//g' /tmp/dbname.sql 
ALTER DATABASE dbname DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_danish_ci;
mysql -p --default-character-set=utf8 db < /tmp/dbname.sql 
6
mysqldump --opt --skip-set-charset --default-character-set='latin1' -u root -p revive_adserver --result-file='dump.sql'

vim dump.sql

:%s/latin1/utf8/gi

:wq

mysql -u root -p

ALTER DATABASE revive_adserver CHARACTER SET utf8;

\q

mysql -D revive_adserver -u root -p < dump.sql
1
Max Zhuk