SSHを介したアクセント文字を含むSQLファイルのコピー

SSHを介したアクセント文字を含むSQLファイルのコピー

サーバーAからサーバーBにデータベースを移行しようとしています。

データベースはmysqlです。データベースには、ç、ãé、...などの文字を含むレコードがいくつかあります。

データベースエンコーディングはUTF8です。

まもなくサーバーAこのようにエクスポートします。

mysqldump -u root -p sis > sis3.sql  

それから(を使って)ファイルを開きましたが、文字は正常ではありませんviでした。だから私は努力しました

 mysqldump -u root -p sis --default-character-set=utf8 > sis3.sql 

まだない。それから

 mysqldump -u root -p sis --default-character-set=latin1 > sis3.sql 

現在のファイル〜らしいいいね

コピー

サーバー B へのレプリケーションは、以下を使用してサーバー B で実行されます。

scp -i p [email protected]:/home2/sis3.sql ~/

ただし、文字セットをサーバーBにコピーするたびにファイルが正しく機能しません。 「特殊」文字は常に間違っています。

3つの方法(latin1、utf8、デフォルト値なし)でインポートしようとしましたが、すべてエラーが発生しました。

私は次のようにインポートします:

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql 

もちろん、デフォルトの文字セットを変更してください。

しかし、mysqlをインポートする前と同様に、ファイルは「破損」しました。これはsshを介した転送によって引き起こされた可能性があると思いました。

この問題なくmysqlデータベースを転送する方法はありますか?

サーバー情報

サーバーA

Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze6) ([email protected]) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Tue May 13 16:34:35 UTC 2014
# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=

サーバーB

Linux version 4.4.0-0.bpo.1-amd64 ([email protected]) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Debian 4.4.6-1~bpo8+1 (2016-03-20)
# locale
LANG=pt_BR.UTF-8
LANGUAGE=
LC_CTYPE="pt_BR.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="pt_BR.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="pt_BR.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=

答え1

他の人に役立つものを見つけました。

http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion

問題はlatin1にエクスポートし、すべてのテーブルがutf8なので、ファイルを「set NAMES utf8」に変更することです。

すでに作業中です。

答え2

  1. 端末または端末エミュレータが使用されていることを確認してください。UTF-8コーディング。

    locale端末エミュレータの構成ではなく、シェルの構成をダンプします。

    を使用すると、--default-character-set=utf8出力がエンコードされますutf8。そのため、サーバーAの端末が正しく表示されない場合は、端末構成が破損しています。

    たとえば、gnome端末メニューでTerminalSet Character Encoding

  2. サーバーAとBのファイルのmd5sumチェックサムが同じであれば、ファイルが正しく転送されたことを「確信」できます。

答え3

端末エミュレータとは何の関係もありません。

mysqldump -u root -p sis --default-character-set=latin1 > sis3.sql

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql

ファイルのエクスポートに使用したのと同じ文字セットを使用してファイルをインポートします。

エクスポートしたファイルに表示される内容は、ファイルを表示するために使用するツールの設定によって異なります。問題を混同しないでください。 mysqlがデータを解釈する方法を見てください。バックアップが大きい場合は、より小さなデータセットでいくつかの実験を行います。

おそらくこれはopensshでしょうか?途中で他のソフトウェアを使用しない限り、ファイルは転送中に変更されません。 md5sumまたは同様の方法を使用してこれを確認できます。

関連情報