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
詳細については、以下の回答を参照してください。
ダンプを使用すると、これを非常に簡単に行うことができます。を使用してダンプを作成します
mysqldump --skip-opt --set-charset --skip-set-charset
次に、別のデータベースを作成し、デフォルトの文字セットをUTF-8に設定してから、次のコマンドでダンプをロードし直します。
mysql --default-character-set=<your iso encoding>
主なアイデアは、データエンコーディングの兆候なしにダンプを作成することです。
したがって、作成時に、テーブルのエンコーディングはデータベースエンコーディングから継承され、UTF-8に設定されます。そして--default-character-set
データを自動的に再コード化するようにMySQLに指示します。
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
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