質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • MySQL

    5836questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • PowerShell

    350questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

  • コマンドプロンプト

    322questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

powershellでmysqldumpを用いて日本語データを含むデータベースを文字化けしないようにファイル保存したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 515

donburi

score 1

MYSQLの1つのデータベースをmysqldumpを使用して
バッチファイル・powershellそれぞれで
ファイル保存したいと考えております。

【環境等】
・データベースに登録されているデータには、
日本語、バイナリ値などが含まれております
・Windows10、Windows Server 2012、2016での使用を想定

コマンドプロンプトでは、
下記のそれぞれの方法でoutputfilenameに
ファイル出力し、
mysql -uroot -pxxxxxxxx databasename < outputfilename.sql
でリストアができております。

mysqldump -uroot -pxxxxxxxx --default-character-set=utf8 databasename > outputfilename.sql
mysqldump -uroot -pxxxxxxxx --hex-blob databasename > outputfilename.sql

同様のことをpowershellでも行いたいのですが、
上記と同じ内容をps1ファイルに記述しても出力されるoutputfilename.sqlの内容が
コマンドプロンプトで実行したときと異なってしまい、
リストアすることができません。
(outputfilename.sqlをテキストエディタで開くと日本語の値が文字化けしてしまっている)

powershellでmysqldumpを用いて日本語データを文字化けせずに
ファイル保存するにはどのようにすればよいのでしょうか

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

こんにちは。

大前提としてコマンドプロンプトのリダイレクト(><)とPowerShellのリダイレクトはまるで別物であり、決して同じように扱ってはいけないとお考えください。  

本件について細かいことを説明するとPowerShellの仕様をきちんと押さえておかないといけないため、ここではその点は端折り簡単に答えます。


答えですが、MySQLのマニュアルにもある様にPowerShellでmysqldumpをする際はリダイレクトせずに--result-fileを使ってください。

shell> mysqldump [options] --result-file=dump.sql

そして、PowerShellには入力リダイレクト演算子(<)は存在しないので

にある様に

mysql -uroot -pYourPassword -e "source C:\temp\filename.SQL"
mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL"

sourceコマンドで取り込む様にしてください。


何故そうすべきなのかについて、簡単に要点だけをリストアップしておきます。

  • Windows PowerShellのリダイレクト演算子で出力されるファイルのエンコーディングはBOM付きUTF-16
    (最新のPowerShell Core 6.0ではBOMなしUTF-8)

  • PowerShellは外部のプログラムからデータを受ける際に直接標準入出力を介さず、ストリームと呼ばれる層を介する
    (これはPowerShellがテキストではなく.NET Frameworkのオブジェクトを取り扱うシェルであるため)

  • 上述のストリームで文字列を取り扱うエンコーディングには、$OutputEncoding[Console]::OutputEncodingがありそれぞれの設定を確認する必要がある

ちなみに、Orlofskyさんの答えにあるchcpコマンドの実行はこのうちの最後の点の設定に関わる部分の挙動を変える行為になります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/26 16:47

    stknohg様

    ご回答いただきありがとうございました。

    ご紹介いただきましたページについては、
    いずれも知らない内容でした。

    質問前にコマンドプロンプトとPowerShellでの結果を比較したところ、
    コマンドプロンプトで出力したファイルはBOMなし、
    PowerShellで出力したファイルはBOMありでしたので、
    このあたりが影響しているのではないかと思っておりましたが
    どのように対応すればよいかわかりませんでした。

    リストア方法については、質問前はコマンドプロンプトを
    使用するつもりでしたのであまり記載しなかったのですが、
    今回リストア方法についてもご紹介いただきましたので
    試してみようと思います。

    現在、すぐに動作確認できる環境でないため
    後日(平日になってしまうと思います)
    再度確認を行いご連絡いたします。

    キャンセル

  • 2018/05/31 08:17

    stknohg様

    先日はご回答いただきありがとうございました。

    動作確認後の連絡が遅くなってしまいましたが
    教えていただきました内容でPowerShellからデータの化け無く
    バックアップ→リストアを行うことができました。

    バックアップ
    mysqldump [options] --result-file=dump.sql

    リストア
    mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL"

    ありがとうございました。

    キャンセル

+1

windows上でmysqldumpしたファイルがリストアできない

PowerShellはデフォルトの処理文字コードがCP932(≒SJIS)になっているため、プログラムの出力結果を受け取るときに文字化けてしまいます。
先に「chcp 65001;」を実行してからmysqldumpをOut-Fileしてみてください。

Windows PowerShellの文字コードを変更する(コマンドプロンプトも)
が使えるのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/26 16:47

    Orlofsky様

    ご回答いただきありがとうございました。

    ご紹介いただきました2つのページは、
    質問前に参照しておりましたが、
    こちらの方法でバックアップを行った後、
    コマンドプロンプトでリストアを行った時に
    エラーとなってしまったため質問させていただいた覚えがあります。

    ※リストアを行う際、パラメータが不足していた可能性もあります
    ※現在、すぐに動作確認できる環境でないため、曖昧な回答で申し訳ありません

    後日(平日になってしまうと思います)
    再度確認を行いご連絡いたします。

    キャンセル

  • 2018/05/31 08:16

    Orlofsky様

    先日はご回答いただきありがとうございました。

    動作確認後の連絡が遅くなってしまいましたが
    教えていただきました内容でPowerShellからデータの化け無く
    バックアップ→リストアを行うことができました。

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • MySQL

    5836questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • PowerShell

    350questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

  • コマンドプロンプト

    322questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • トップ
  • MySQLに関する質問
  • powershellでmysqldumpを用いて日本語データを含むデータベースを文字化けしないようにファイル保存したい