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

解決済みの質問

データベースでの文字化け

お世話になっております、ぷりんと申します。

下記の投稿をしましたが、解答が得られませんでした・・・。
しかしいろいろ調べているうちに、PHPでは「 mysql_set_charset 」を実行すると文字化けが治るとお聞きしました。

この mysql_set_charset をPerlで実行するには、どうしたらよろしいのでしょうか?


以下前回投稿

3日間文字化けと格闘した結果、ついに力尽きてしまったのでまたこちらにお世話になります(TдT)
使用しているコードはUTF-8です。

さて、データベースへ

  $db=DBI->connect("略");
  $sth = $do->prepare("select name from xxx");

にて接続、nameカラムのデータを抽出し、配列変数に入れて表示させました。

データベースに直接日本語入力(例えば”ああああ”)をし、抽出すると、HTML出力の際に「????」となってしまいます。
INT型は正常に処理されます。(文字ではありませんが念のため記述)

データベースに直接記入しない方法(CGIにてInsertを使用して)「ああああ」を送信しますと、データベースをブラウザで確認した際に「ああああ」になりますが
CGIにてSelectを使用し、リクエストすると きちんと「ああああ」と表示されます。


また、InsertでNプレフィックスをつけた際はデータベースをブラウザで確認するときちんと「ああああ」となっておりますが、CGIにてSelectを使用してリクエストすると「????」とデータベースに直接日本語入力した時と同じ結果になります。


最終的に「読み込みも問題なく、データベースをブラウザで確認しても(または直接編集しても)正常に処理される環境にしたいのです!

文字化け関係はしんどいかと思いますが、どなたかお詳しい方、ご教授お願い致します。


-環境-
●ロリポップレンタルサーバー
  Perl(ver.5.8.8)
  MySQL(バージョン5.1.34)利用可。『PHP My Admin』でのみ利用可。

●本文中の「データベースをブラウザで確認」とは、PHP My Adminにはいって確認しているという意。

●cgi保存形式は全てUTF8(BOM無し。有だとエラー)

●HTML出力は
  print "Content-type: text/html; charset=utf-8\n\n";

●show variables like 'char%'; を実行した結果

character_set_client     utf8
character_set_connection  utf8
character_set_database   utf8
character_set_filesystem  binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir/usr/share/mysql/charsets/

●照合順序
カラム:utf8_unicode_ci
テーブル:utf8_unicode_ci
DB:utf8_unicode_ci
MySQL接続:utf8_unicode_ci

-試したこと-
Encode::encodeやEncode::decode関数を使用しても変化無し。

投稿日時 - 2013-03-06 14:01:23

QNo.7979270

すぐに回答ほしいです

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

とりあえず

$db = DBI->connect( "略", $user, $password, { mysql_enable_utf8 => 1, } );

としてみては、どうでしょうか。

$user, $password には、それなりの値が入っているものとします。

投稿日時 - 2013-03-06 20:55:57

補足

ご回答ありがとうございます!確かにDBへの読み書きは正常に処理されるようになりました!!
しかしながら、その他のHTMLの部分が文字化けしてしまいます・・・。
解決まであと一歩なのですが(TдT)
"Content-type: text/html; charset=utf-8\n\n";
と出力してあるはずなんですが、二重出力にでもなってしまっているのでしょうか?

投稿日時 - 2013-03-06 21:11:47

お礼

ありがとうございます!
Perl側でuse utf8;を、
HTML側でprint "Content-type: text/html; charset=utf-8\n\n";を、
DB側でご教授いただきました、mysql_enable_utf8 => 1
全てを実行した結果、全てが解決いたしました!!

本当に、本当にありがとうございました!!

投稿日時 - 2013-03-06 21:49:27

ANo.1

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

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

回答(1)

あなたにオススメの質問