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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

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

PowerShell

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

コマンドプロンプト

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

Q&A

解決済

2回答

4777閲覧

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

donburi

総合スコア7

MySQL

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

PowerShell

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

コマンドプロンプト

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

0グッド

0クリップ

投稿2018/05/24 20:32

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を用いて日本語データを文字化けせずに
ファイル保存するにはどのようにすればよいのでしょうか

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

大前提としてコマンドプロンプトのリダイレクト(><)と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/25 03:49

編集2018/05/25 04:21
stknohg

総合スコア796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donburi

2018/05/26 07:47

stknohg様 ご回答いただきありがとうございました。 ご紹介いただきましたページについては、 いずれも知らない内容でした。 質問前にコマンドプロンプトとPowerShellでの結果を比較したところ、 コマンドプロンプトで出力したファイルはBOMなし、 PowerShellで出力したファイルはBOMありでしたので、 このあたりが影響しているのではないかと思っておりましたが どのように対応すればよいかわかりませんでした。 リストア方法については、質問前はコマンドプロンプトを 使用するつもりでしたのであまり記載しなかったのですが、 今回リストア方法についてもご紹介いただきましたので 試してみようと思います。 現在、すぐに動作確認できる環境でないため 後日(平日になってしまうと思います) 再度確認を行いご連絡いたします。
donburi

2018/05/30 23:17

stknohg様 先日はご回答いただきありがとうございました。 動作確認後の連絡が遅くなってしまいましたが 教えていただきました内容でPowerShellからデータの化け無く バックアップ→リストアを行うことができました。 バックアップ mysqldump [options] --result-file=dump.sql リストア mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL" ありがとうございました。
guest

0

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

PowerShellはデフォルトの処理文字コードがCP932(≒SJIS)になっているため、プログラムの出力結果を受け取るときに文字化けてしまいます。

先に「chcp 65001;」を実行してからmysqldumpをOut-Fileしてみてください。

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

投稿2018/05/24 20:51

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donburi

2018/05/26 07:47

Orlofsky様 ご回答いただきありがとうございました。 ご紹介いただきました2つのページは、 質問前に参照しておりましたが、 こちらの方法でバックアップを行った後、 コマンドプロンプトでリストアを行った時に エラーとなってしまったため質問させていただいた覚えがあります。 ※リストアを行う際、パラメータが不足していた可能性もあります ※現在、すぐに動作確認できる環境でないため、曖昧な回答で申し訳ありません 後日(平日になってしまうと思います) 再度確認を行いご連絡いたします。
donburi

2018/05/30 23:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問