こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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でデータベースに渡すだけなので略します。
データベースへデータを渡したとき、文字化けさせないためには、どうしたらいいのでしょうか?
初歩的なことかもしれませんが、どうかお力を貸してください。お願いします。

投稿日時 - 2004-11-18 21:41:29

QNo.1090367

困ってます

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

こんにちは。

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

投稿日時 - 2004-11-22 10:40:37

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

Perlはやったことないのですが解決のヒントになるかも知れないことを書きます。

原因は既に出ているようにCGI側とDB側の文字コードが違っているんだろうと思います。

で、文字コードの変換部分ですが、

> &jcode'convert(\%formin, 'jis');

のforminって配列じゃないですか?convertメソッドって文字列に対して使うんじゃないかと思うんですが。つまり、seiとmeiを変換しないといけないのでは?

それと、DBに渡す前に文字コードがちゃんと変更されていることは確認されましたか?やっていなければgetcodeというメソッドでできるそうです。

Perlに関しては無学なので見当はずれだったら申し訳ありません。

投稿日時 - 2004-11-22 12:42:27

補足

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

投稿日時 - 2004-11-22 13:51:35

ANo.1

こんにちは。

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

投稿日時 - 2004-11-19 10:06:56

補足

こんにちは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などに変換してみましたが、やはりデータベース側の表示は文字化けしたままです。
文字コード変換についても、これまた初めてなのでよろしくお願いします。たびたび申し訳ございません。

投稿日時 - 2004-11-19 20:09:57

お礼

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

投稿日時 - 2004-11-21 18:38:13

あなたにオススメの質問