[mysqldumpの文字化け]文字コードをlatin1で作ってしまっているDBを文字化けせずにmysqldumpで取得したいのですが、うまい方法が思いつきません。phpmyadminを経由すると何故か文字化けしないのですが、データサイズが肥大化してしまっているために、これで頻繁にバックアップを取るのは辛い状況です。何か良案はないでしょうか?


・シェルログインはできるが、my.cnf変更権限はない。
・show variables like '%char%';で確認したところ、character_set_system以外latin1がセットされている。
・mysqlのバージョンは4.1.18

回答の条件
  • 1人2回まで
  • 登録:2009/11/18 10:44:09
  • 終了:2009/11/20 13:35:23

ベストアンサー

id:shintabo No.1

shintabo回答回数45ベストアンサー獲得回数102009/11/19 00:50:14

ポイント40pt

# latin1だったら、latin1で取得すれば文字化けしないかと思うのですが、、、

mysqldump -uroot -p db_name --default-character-set=latin1 > db_name.latin1.db

# これは参考にならないですか?

# http://modperlis.bounceme.net/2009/03/movabletype41mysqllatin1ut...

id:res01

ご回答ありがとうございます。

私も普通は化けないと思っていたのですが・・・何か見落としがあるのかもしれません。

dumpは手当たり次第に文字コードを指定して試しましたがだめでした。。

どのエンコードタイプでも開けないということはdump時点でデータが死んでるのかもしれません。

2009/11/19 11:58:57

その他の回答(2件)

id:shintabo No.1

shintabo回答回数45ベストアンサー獲得回数102009/11/19 00:50:14ここでベストアンサー

ポイント40pt

# latin1だったら、latin1で取得すれば文字化けしないかと思うのですが、、、

mysqldump -uroot -p db_name --default-character-set=latin1 > db_name.latin1.db

# これは参考にならないですか?

# http://modperlis.bounceme.net/2009/03/movabletype41mysqllatin1ut...

id:res01

ご回答ありがとうございます。

私も普通は化けないと思っていたのですが・・・何か見落としがあるのかもしれません。

dumpは手当たり次第に文字コードを指定して試しましたがだめでした。。

どのエンコードタイプでも開けないということはdump時点でデータが死んでるのかもしれません。

2009/11/19 11:58:57
id:snow_leopard No.2

snow_leopard回答回数294ベストアンサー獲得回数222009/11/19 02:18:22

ポイント13pt

そういうところは使わないのが一番です。

id:res01

そうですね。その通りだと思います。

2009/11/19 11:59:16
id:shintabo No.3

shintabo回答回数45ベストアンサー獲得回数102009/11/20 00:01:04

ポイント40pt

# むー、だめですか。。。

# これだけ、試してもらえませんか?

mysqldump -uroot -p db_name --default-character-set=latin1 --skip-set-charset > db_name.latin1.db

# うまくいきますように。。。

id:res01

ありがとうございます。

その通りコマンドを打ってみましたがやはり文字化けしています・・・

その後色々調べてみたのですが、mysqldump --helpで状態を見てみたら、default-character-set=binaryが標準で指定されていて、

コマンドでこれを指定してもbinaryになっていることがわかりました。(nkf -gで確認しました。)

しかしバイナリエディタで中身を確認してもやっぱり文字化けの状態は変わっていませんでした。

短期的な解決は難しいと判断してphpから取得するようにします。

ご丁寧に回答いただいたのにすみません。

2009/11/20 13:34:18
  • id:standard_one
    binaryで取ればいいんじゃね?
  • id:res01
    回答ありがとうございます。
    binaryで取る、というのは--default-character-set=binaryをつけてのdumpということで正しいでしょうか?
    解を検索しているときに良くこのやり方が書いてあったので試してはみたのですが、dumpデータをテキストエディタで開いてみると
    やはり化けています。
    やり方が悪いのでしょうか?
  • id:b-wind
    >dumpデータをテキストエディタで開いてみると
    エディタが文字コード判定ミスってるオチは無いよな。

    どっちにしろ phpMyAdmin で問題ないんなら
    PHP でダンプするプログラム書けばいいんじゃね?
  • id:res01
    b-windさん
    ご回答ありがとうございます。

    >エディタが文字コード判定ミスってるオチは無いよな。
    エディタが判定ミスをしている判断のつけ方がよくわからないのですが、terapadや秀丸で様々な文字コードで読み直しても改善されませんでした。

    >どっちにしろ phpMyAdmin で問題ないんなら
    >PHP でダンプするプログラム書けばいいんじゃね?
    仰る通りです。ただ、なぜうまくいかないのか原因をはっきりさせたいという思いもあるので質問させていただきました。
  • id:shintabo
    # あぁ!!
    # それなら、これだっ!!
    mysqldump --defaults-file=./my.cnf -uroot -p db_name > db_name.db
    # defaults-fileは、globalを読み込まないので、
    [mysqldump]
    default-character-set = latin1
    # などを好きに書けます
    # 暇があれば、やってみてください

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

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

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

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