※ ChatGPTを利用し、要約された質問です(原文:データベースでの文字化け)
データベースでの文字化けの解決方法とは?
このQ&Aのポイント
データベースでの文字化けを解消する方法について詳しく教えてください。
UTF-8を使用してデータベースに日本語を保存した場合、表示が文字化けしてしまいます。どうすれば解決できるでしょうか?
Perlでのデータベース接続時の文字化け問題について、ご教授いただけないでしょうか?
お世話になっております、ぷりんと申します。
下記の投稿をしましたが、解答が得られませんでした・・・。
しかしいろいろ調べているうちに、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関数を使用しても変化無し。
お礼
ありがとうございます! Perl側でuse utf8;を、 HTML側でprint "Content-type: text/html; charset=utf-8\n\n";を、 DB側でご教授いただきました、mysql_enable_utf8 => 1 全てを実行した結果、全てが解決いたしました!! 本当に、本当にありがとうございました!!
補足
ご回答ありがとうございます!確かにDBへの読み書きは正常に処理されるようになりました!! しかしながら、その他のHTMLの部分が文字化けしてしまいます・・・。 解決まであと一歩なのですが(TдT) "Content-type: text/html; charset=utf-8\n\n"; と出力してあるはずなんですが、二重出力にでもなってしまっているのでしょうか?