0

大きな SQL ファイルをインポートしようとしています。1 つのサーバーで mysqldump によって作成され、iconv で変換されます。次のコマンドを使用します。

$ mysqldump -uxxx -p xxx > data.sql
$ iconv -f UTF-8 -t ISO-8859-1//TRANSLIT data.sql data.iconv.sql

mysqldump はすべてを utf-8 に変換しようとするため、データベースの "\x91" がダンプで "\xc3\x82\xc2\x91" に変わっていることに気付きました。iconvで「\ x91」に戻しました。それらを変換しないと、新しいサーバーでは "\xc2\x3f" になります。現在の「\x3f」の代わりに。

そのため、前に読んだように、cp1252 エンコーディングに固有の文字がいくつかあります。たとえば、"\x91" や "\x92" です。これらの文字は両方とも、新しいデータベースでは "\x3f" に変わりました。これは、インポートに使用するコマンドです。

$ /opt/mysql5/bin/mysql -uxxx -p -Dxxx < data.iconv.sql 

これがどのように発生する可能性があり、それを防ぐために何をすべきか知っている人はいますか? これを知っていれば、データをそのまま移行できるはずです。

追加情報:

このソースをiconv-thingsに使用しました。ご覧のとおり、このページでは、他の 1 人も cp1252 で問題を抱えていました。多分それが原因です。

サーバーのバージョンは次のとおりです。

old-host: Ver 10.10 Distrib 5.0.18、pc-linux-gnu (i486) 用 new-host: Ver 10.11 Distrib 5.0.51、pc-linux-gnu (i686) 用

4

6 に答える 6

1

私のシステムでは、mysqld はデフォルトで、データを latin1 にスウェーデン語の照合で保存します。同様に、mysql コマンドライン クライアントはデフォルトで latin1 でデータを提供します。一方、mysqldump のデフォルトは utf-8 です。

これにより、mysqldump を介してデータをエクスポートし、mysql コマンドライン クライアントを使用してインポートするときに問題が発生します。2 つの文字セットに共通ではない文字が変更されます。

解決策は、mysqldump を取得して、mysql クライアントの文字セットを正しく設定する追加のコマンドでデータを装飾することです。

mysqldump --set-charset ...

これにより、デフォルトでset name = utf-8、ダンプされたデータに " " が追加されます。これは、mysql クライアントによってクリーンにインポートできるようになりました。

追加のオプション " --default-character-set=xxx" を mysqldump で使用して、ダンプを utf-8 以外のものに変換できます。

この-set-charsetオプションを使用すると、iconv をまったく使用する必要がなくなります。

于 2008-12-06T14:54:47.683 に答える
0

mysqlがutf-8に変換している場合は、次のようにします。

iconv -f utf-8 -t IBM-1252 xxxx

これにより、オープンクォートがx"91"に変換されます。「xc291」は実際にはオープンクォートのutf-8です。

于 2008-11-19T15:22:37.150 に答える
0

私はまだ実用的な解決策を見つけていません。2 つの接続を作成し、単純に一方の接続から選択して他方を更新するスクリプトを使用して移行を試みます...

于 2008-11-19T14:32:03.663 に答える
0

データが cp1252 の場合、iconv に utf-8 を指定するのはなぜですか?

于 2008-11-18T12:19:23.993 に答える
0

どのバージョンの mysqldump を使用していますか?

最近のバージョン 5 リリースでは、文字セットを設定するコマンドでテーブル ダンプをラップします。

SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;

CREATE TABLE ...
...
...
SET character_set_client = @saved_cs_client;

これらの有無がインポートに影響を与える可能性はありますか?

于 2008-11-20T14:15:16.240 に答える
-1

試す:-

iconv -f IBM-1252 -t ISO-8859-1

前回の返信が減点された理由がわかりません。utf-8 は ASCII ではありません! すべての 7 ビット utf 文字は 7 ビット ASCI 文字セットと同じですが、最初のビット b'1000000' は UTF-8 で特別な意味を持ち、文字が Unicode 2 3 または 4 バイト文字であることを示します。

于 2008-11-19T15:12:08.170 に答える