人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: makocan
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL phpMyAdmin SELECT SET エクスポート
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● b-wind
●20ポイント

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

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

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


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


2 ● tobeoscontinue
●20ポイント

"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が同じ文字セット)で逆に文字変換がされず正常に(入れたものがそのままに)受け取れるのではないでしょうか。

◎質問者からの返答

>お二人方

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

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


3 ● tobeoscontinue
●20ポイント

当方の環境は

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を試してみて下さい。

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

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にコピーするスクリプトを書く手があると思いますが、その手間が見合うか問題です。


4 ● fonya3
●20ポイント

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/


5 ● fonya3
●20ポイント

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

CREATE DATABASE DATABASEORIGINAL DEFAULT CHARACTER SET utf8;

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ