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

締切り済みの質問

PHPmyAdminデータベースの文字化け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-01 12:22:18

QNo.7970455

すぐに回答ほしいです

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

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

回答(1)

ANo.1

こんちは。

いろいろと記憶薄な上に、PHPでの経験ですが。。。
まだ回答がついていないようですので、参考程度に書き込みをば。

>>文字化け関係はしんどいかと思いますが

そうですね。確かに。

しんどいと思うところに漠然とした回答を書き込むのも気は引けますが。。。


>>●cgi保存形式は全てUTF8(BOM無し。有だとエラー)
>>●HTML出力は
>>●show variables like 'char%'; を実行した結果
>>●照合順序

【出来る限りの箇所】で、「○○の文字コードでやってる」
とかって指定しておくことで解消できる。。。とかって過去にやった記憶がありますが、
上記以外の箇所で、思い当たる箇所は?

おいら的には、「Perl上での文字コードの指定」と、「DB接続時?の文字コードの指定」
とか出来ないっけ?(HTML出力。の文字コード指定、と、サーバ言語処理時の文字コード指定。は別であったかと。
って感じですかね。

PHPだと、こんなんだったような気はします。気はします。

http://saboten009.blogspot.jp/2008/01/phpmysqlutf-8.html


。。。参考程度に。。。はい。

投稿日時 - 2013-03-01 13:11:04

補足

ご回答ありがとうございます!参考でも大変うれしいです!
以下返信

DB接続時、PHPではmysql_set_charset を入れるだけで解決するとききました。しかしPerlでの記述方法がわかりません・・・。

SET NAMESはセキュリティ上、極力使いません。

Perlでは use utf8;を使用しております。

投稿日時 - 2013-03-01 13:22:06

お礼

解決いたしました!

結局はPerlでDBIモジュールを使用する際、そこでもutf8の設定が必要とのことでした。

文字化けの問題は本当にやっかいです・・・。

投稿日時 - 2014-04-16 13:35:17

あなたにオススメの質問