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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

26274閲覧

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

hiro_sara

総合スコア11

MySQL

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2016/08/03 05:23

windowsで、mysqlファイルをdumpしてリストアがしたいです。

データベースの文字コードはUTF-8に設定してあり、mysqldumpのコマンドで「--default-character-set=utf8」のオプションをつけていても、dumpファイルをメモ帳で開くと文字化けしてしまいます。

最悪、dumpファイルは文字化けしていてもリストアしたら元に戻ればいいと思い、以下のような作業を行いました。

「C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump --default-character-set=binary db_name1 > 20160803.sql」というコマンドを実行し、dumpファイルを作成。
このファイルでリストアしようと「C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql --default-character-set=binary db_name2 < 20160803.sql」というコマンドを実行すると、以下のようなエラーメッセージが出てしまいます。

「ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected.」

「--binary-mode=1」というオプションをつけてみたのですが、sql syntaxエラーで出てしまい途方に暮れている状態です。
どのようにしたら解決できるか教えて頂けないでしょうか?よろしくお願いします。

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

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

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

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

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

dupont_kedama

2016/08/03 05:40

MySQLのバージョンを記載ください。
kunai

2016/08/03 05:49 編集

メモ帳ではUTF-8nは文字化けすると思います。 他にテキストエディタがあればそちらで確認してみてください ついでに、Syntaxエラーが出たというのであればそのメッセージも記載願います
hiro_sara

2016/08/03 06:11 編集

MYSQLのバージョンは5.7です。 テキストエディタはEmEditorでも文字化けしています。 C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -u root -proot db_name --binary-mode < C:\20160803.sql ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??-' at line 1
guest

回答2

0

ベストアンサー

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql -D db_name2 --default-character-set=binary
でまずはクライアントを起動、ログインしてから
source 20160803.sql
とするといかがでしょう。

追記
それでもダメなら、ログイン後に
set character_set_client=binary;
を打ってから
source 20160803.sql
としてみていかがでしょう。

投稿2016/08/03 05:45

編集2016/08/03 05:54
dupont_kedama

総合スコア925

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

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

hiro_sara

2016/08/03 05:54

回答ありがとうございます。 ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: 'ÿþ-'. Bye のようなメッセージが出ました。
hiro_sara

2016/08/03 05:58

set character_set_client=binary; のあとに source 20160803.sql でも同じ結果でした。
dupont_kedama

2016/08/03 06:04

ではmysqldumpの起動オプション、mysqlの起動オプション、set character_set_clientの3つで指定するものを「binary」から「utf8」に置き換えても変わりませんでしょうか。
hiro_sara

2016/08/03 06:35

3つともutf8にしましたが変わりませんでした。
dupont_kedama

2016/08/03 06:55

やっかいですね。 show variables like 'character%'; の結果を記載いただけますか?
dupont_kedama

2016/08/03 09:00

連続でコメント失礼します。 気になっているのは、utf8でdumpしたファイルが文字化けしていたことですね。 dumpした時点で文字化けていたなら取り込みも成功するとは思えません。 よって「文字化けせずにdumpできること」を最初の目標点にするのがよいかと思います。 ・現在格納されている文字が文字化けていないこと ・サーバーの文字コード設定 ・データベースの文字コード設定 ・テーブルの文字コード設定 ・クライアント(mysqldump)の文字コード設定 あたりを確認するのがよいかと思います。 ちなみに最近のWindowsのメモ帳はUTF-8Nのテキストも普通に開けますね。
hiro_sara

2016/08/04 07:41 編集

+--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+---------------------------------------------------------+ ありがとうございます。dupont_kedamaさんにまとめていただいた事項をもう一度確認してまた報告させていただきます。
hiro_sara

2016/08/04 09:52 編集

mysqldumpのコマンドをpowershellで実行していたのが理由だったらしく、 コマンドプロンプトで実行したら文字コードを何も指定しなくても、文字化けしないdumpファイルが作成されリストアもできました! ただ、できればpowershellでmysqldumpを実行して 文字化けしないようにしたいのですが、どうすればいいでしょうか? ちなみに、 「mysqldump --default-character-set=utf8 -u root -proot tsmsd | Out-File 20160804.sql -encoding UTF8」のようなコマンドをpowershellで実行してみましたが、文字化けしてしまいました。
hiro_sara

2016/08/08 02:33

とりあえず今回はコマンドプロンプトを使うことで解決しました。 dupont_kedamaさんがおっしゃられていた "「文字化けせずにdumpできること」を最初の目標点にするのがよい"というアドバイスで気づくことができました。 ありがとうございました!
dupont_kedama

2016/08/08 03:42

コメント遅くなりました。 原因判明してよかったです。 PowerShellはデフォルトの処理文字コードがCP932(≒SJIS)になっているため、プログラムの出力結果を受け取るときに文字化けてしまいます。 先に「chcp 65001;」を実行してからmysqldumpをOut-Fileしてみてください。 (参考) https://blog.e2info.co.jp/2016/02/27/windows-powershell-chcp/
hiro_sara

2016/08/08 09:26

うまくいきました。 すべて解決です。ありがとうございました。
guest

0

mariaの質問で同様なものが出ていますね→こちら

mysqlを呼び出すときに--binary-modeオプションをつけるとどうでしょうか?

投稿2016/08/03 05:36

yambejp

総合スコア116720

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

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

hiro_sara

2016/08/08 02:28

powershellの文字コードの問題だったみたいです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問