- 締切済み
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関数を使用しても変化無し。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちは。 いろいろと記憶薄な上に、PHPでの経験ですが。。。 まだ回答がついていないようですので、参考程度に書き込みをば。 >>文字化け関係はしんどいかと思いますが そうですね。確かに。 しんどいと思うところに漠然とした回答を書き込むのも気は引けますが。。。 >>●cgi保存形式は全てUTF8(BOM無し。有だとエラー) >>●HTML出力は >>●show variables like 'char%'; を実行した結果 >>●照合順序 【出来る限りの箇所】で、「○○の文字コードでやってる」 とかって指定しておくことで解消できる。。。とかって過去にやった記憶がありますが、 上記以外の箇所で、思い当たる箇所は? おいら的には、「Perl上での文字コードの指定」と、「DB接続時?の文字コードの指定」 とか出来ないっけ?(HTML出力。の文字コード指定、と、サーバ言語処理時の文字コード指定。は別であったかと。 って感じですかね。 PHPだと、こんなんだったような気はします。気はします。 http://saboten009.blogspot.jp/2008/01/phpmysqlutf-8.html 。。。参考程度に。。。はい。
お礼
解決いたしました! 結局はPerlでDBIモジュールを使用する際、そこでもutf8の設定が必要とのことでした。 文字化けの問題は本当にやっかいです・・・。
補足
ご回答ありがとうございます!参考でも大変うれしいです! 以下返信 DB接続時、PHPではmysql_set_charset を入れるだけで解決するとききました。しかしPerlでの記述方法がわかりません・・・。 SET NAMESはセキュリティ上、極力使いません。 Perlでは use utf8;を使用しております。