サーバー上のデータベースを頻繁に更新しており、コマンドラインから次の行を実行します。
mysqldump -u root --password=mypass mydb|mysql -h mysite.cc -u remotusr --password=remotpsw remotdb
問題は、途中でUTF文字が失われることです。
utf文字をcmdに保持するにはどうすればよいですか、またはこれを行うためのより良い方法は何ですか?
サーバー上のデータベースを頻繁に更新しており、コマンドラインから次の行を実行します。
mysqldump -u root --password=mypass mydb|mysql -h mysite.cc -u remotusr --password=remotpsw remotdb
問題は、途中でUTF文字が失われることです。
utf文字をcmdに保持するにはどうすればよいですか、またはこれを行うためのより良い方法は何ですか?
(回答へのアップグレード)
以下に記載されているようにmysqldump
—データベースバックアッププログラム:
--default-character-set=charset_name
charset_name
デフォルトの文字セットとして使用します。セクション10.5「文字セットの構成」</a>を参照してください。文字セットが指定されていない場合は、mysqldump
を使用しutf8
、以前のバージョンではを使用しますlatin1
。
[ deletia ]
出力に追加します。このオプションはデフォルトで有効になっています。ステートメントを抑制するには、を使用します。
SET NAMES default_character_set
SET NAMES
--skip-set-charset
したがって、これらのデフォルトを上書きする設定がオプションファイルにない限り(設定が無効になるように指定できます--no-defaults
)、からの出力は、Unicode文字を失うことなくmysqldump
別のセッションにリダイレクトできる以上のものである必要があります。mysql
代わりに、新しいデータベースからデータを取得して表示するときに、より小さな文字セットへの変換が行われているように見えます。この目的でPHPのオリジナルのMySQLAPIを使用しているため、マニュアルの章(下記)の概要に警告がありますが、を使用mysql_set_charset()
して接続文字セットを設定する必要があります。
この拡張機能は、新しいコードの記述にはお勧めしません。代わりに、mysqliまたはPDO_MySQL拡張機能のいずれかを使用する必要があります。MySQL APIを選択する際の詳細については、MySQLAPIの概要も参照してください。