MySQLの事で質問なのですが、PHPMyadminでのエクスポートやmysqldumpを使用したバックアップデータが文字化けしてしまいます。


MySQL内でSET NAMES Latin1を実行しなければ、selectでも正常に表示され無いため、何か特殊な処理が必要なのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/11/15 15:09:42
  • 終了:2006/11/19 04:17:48

回答(5件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/11/15 15:14:24

ポイント20pt

MySQL4.1 以上では文字コードについて扱いが非常にシビアです。

http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40

まずはここを読んでください。


SET NAMES Latin1; なら正常に表示されるというのは、すでに異常な状態なので、上記サイトにしたがって設定後DBの再構築が必要に思われます。

id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542006/11/17 12:52:04

ポイント20pt

"mysqldump 文字化け"で検索してみました。

http://www.mysql.gr.jp/mysqlml/mysql/msg/11273]

mysqldumpはデフォルトではutf8で出力するようです。

そのため文字変換(latin1(が実際入っているのは違う)->utf8)がされ文字化けしたものと思います。


>MySQL内でSET NAMES Latin1を実行しなければ、selectでも正常に表示され無い

DB内ではlatin1(が実際入っているのは違う)として入っているのではないでしょうか。

SET NAMES Latin1とすること(databaseとclientが同じ文字セット)で逆に文字変換がされず正常に(入れたものがそのままに)受け取れるのではないでしょうか。

id:makocan

>お二人方

お二人方の言うことによると、もはや、このデータを正常な状態でバックアップを取る事は不可能なのでしょうか?

別のDBに移動させたいと思うのですが、UTF以外の文字コードでバックアップすることは可能でしょうか?

2006/11/17 13:03:00
id:tobeoscontinue No.3

tobeoscontinue回答回数214ベストアンサー獲得回数542006/11/17 19:33:32

ポイント20pt

当方の環境は

phpMyAdmin 2.8.0.2

MySQL 4.0.24

Client characterset: latin1

Server characterset: latin1

となっていて、DBにはUTF8で出し入れしています。

makocanさんのとは環境や設定が違うでしょうから適宜読みかえて下さい。

4.0系は文字セットが合ってれば何もしないのでしょう。

selectで日本語を使うようになると問題になるでしょうが(そもそも4.0系はUTF8自体が使えないみたい。)今のところASCII文字しか使っていないので不便は感じていません。


mysqldumpでは--default-character-set=ujisのように指定できます。

私の環境ではUTF8が使えないので文字化けして使えませんでした。

使っている文字セットかbinaryを試してみて下さい。

  • default-character-set=だけで実行するとエラーになってこのファイルを見ろとパスを表示してくれるはずです。

それを見て使える文字セットを確認して下さい。

4.1ならこちらhttp://dev.mysql.com/doc/refman/4.1/ja/charset-charsets.html]


phpMyAdminではトップページでlanguageを使っている文字セットを選択して下さい。

全体でやると量が多いようならテーブルを選んで、エクスポートにして、一番下の実行を押します。ここで文字化けするようならまた別の対策を考えないと。

私の環境ではUTF8を選ぶことで文字化けはしませんでした。

ただ4.1系は自動でコード変換が入るようなので結果が違うかもしれませんが。


バックアップが上手くいったとして、戻して確認する場合は、違うデーターベース名にするとか、違うマシーン上のデーターベースにするとかして、現在のデータベースを直接置換しないようにした方が安全です。


>UTF以外の文字コードでバックアップすることは可能でしょうか?

UTF8を出したのは私が使っているというだけでバックアップにはどの文字セットでも大丈夫です。


>別のDBに移動させたい

mysqldumpやphpMyAdminのツールで解決できればいいのですが、

最悪、phpで別のDBにコピーするスクリプトを書く手があると思いますが、その手間が見合うか問題です。

id:fonya3 No.4

fonya3回答回数238ベストアンサー獲得回数102006/11/19 02:51:49

ポイント20pt

utf8で運用しているmysql-4.1.18で試してみました。

以下のようにしてmysqldumpでバックアップ。

dbbackup.dumpは確かに文字化けしてます。

それを新しいDBにレストアしてselectしてみた結果のtest.txtは

ちゃんと元の文字コードutf8で読めました。

よってmysqldump自体には問題はないと思います。

% mysqldump -u username -pPASSWORD DATABASEORIGINAL > dbbackup.dump
% mysql -u username -pPASSWORD
mysql> create database DATABASETEST
% mysql -u username -pPASSWORD DATABASETEST < dbbackup.dump
% echo "select * from TABELNAME" | mysql -u username -pPASSWORD DATABASETEST > test.txt

実際に試した元のDBはこのblogのバックエンドです。

http://www.2ones.com/geeklog_000/

id:fonya3 No.5

fonya3回答回数238ベストアンサー獲得回数102006/11/19 03:04:29

ポイント20pt

書き忘れましたが、もともとのDBは

CREATE DATABASE DATABASEORIGINAL DEFAULT CHARACTER SET utf8;

で、キャラクタセットをutf8に指定しています。

このへんの情報は以下のURLを参照してください。

http://dev.mysql.com/doc/refman/4.1/ja/charset-database.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません