• ベストアンサー

perlのDBIモジュールからmysqlへデータを送ったら文字化けします。

こんにちは。 タイトル通り、perlのDBIモジュールからデータベース(mysql)にデータを渡してみたのですが(INSERT INTOです。)phpmyadminというDB管理ツールでテーブルの内容を見てみると、文字化けしてました。 フォームより受け取った値(文字列です。もっというと名前)をCGIでデータベースへ追加するといったことをしています。ソースは以下のとうりです。 require 'cgi-lib.pl'; my %formin; &ReadParse(\%formin); $sei=$formin{'sei'}; $mei=$formin{'mei'}; あとはこの変数をDBIでデータベースに渡すだけなので略します。 データベースへデータを渡したとき、文字化けさせないためには、どうしたらいいのでしょうか? 初歩的なことかもしれませんが、どうかお力を貸してください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 これ、ホントややこしいですね・・・。 とりあえず、MySQLの方をS-JISにしてみて下さい。 MySQLのコンフィグファイルに書いてあります。 (^^ゞ

その他の回答 (2)

noname#223623
noname#223623
回答No.3

Perlはやったことないのですが解決のヒントになるかも知れないことを書きます。 原因は既に出ているようにCGI側とDB側の文字コードが違っているんだろうと思います。 で、文字コードの変換部分ですが、 > &jcode'convert(\%formin, 'jis'); のforminって配列じゃないですか?convertメソッドって文字列に対して使うんじゃないかと思うんですが。つまり、seiとmeiを変換しないといけないのでは? それと、DBに渡す前に文字コードがちゃんと変更されていることは確認されましたか?やっていなければgetcodeというメソッドでできるそうです。 Perlに関しては無学なので見当はずれだったら申し訳ありません。

logicalpinky
質問者

補足

こんにちはtaka451213さん、masa_peeさん。 解決したお礼を言いたいのですが、お礼は全角で100文字以内にしてください。とあったので、補足を使ってお礼をさしていただきます。ありがとうございました。 MYSQLのコンフィグファイルというものを、どうやってみればいいのかわかりませんでした。(phpmyadminから、どうやったら見れるかわからない。ドキュメントやらは全部英語なんで読む気がしません。というか読めません。) だからメーンページのLanguageをja-eucからja-sjisに変えてみたところ、テーブルにちゃんと文字化けせずに値を渡すことができました。 ちなみにconvertは連想配列に対しても使えるみたいです。僕が買った本に書いてありました。 taka451213さん、masa_peeさんありがとうございました。

回答No.1

こんにちは。 ソースを載せて頂いてますが、そこは関係ないです・・・。 HTML側の文字コード、MySQLのデフォルトの文字コード、OS。 この3つの兼ね合いです。 (^^ゞ

logicalpinky
質問者

お礼

すいません。レンタルサーバのOSは、FreeBSD 4.10-RELEASE-p3 i386 でした。 アドバイスを、よろしくお願いします。

logicalpinky
質問者

補足

こんにちはtaka451213さん。またお世話になります。 HTMLフォームのヘッダーに <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=SHIFT_JIS"> を入れてみました。 MySQLのデフォルトの文字コードをいうのがよくわかりませんが、phpmyadminにログインした画面でlanguage:japanese(ja-euc)となっていますがこれのことでしょうか?OSはレンタルサーバなので、Linuxだと思います。 フォームから受け取った値をCGIで require 'cgi-lib.pl'; my %formin; &ReadParse(\%formin); require 'jcode.pl'; &jcode'convert(\%formin, 'jis'); jisやsjis、eucなどに変換してみましたが、やはりデータベース側の表示は文字化けしたままです。 文字コード変換についても、これまた初めてなのでよろしくお願いします。たびたび申し訳ございません。

関連するQ&A