• 締切済み

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関数を使用しても変化無し。

  • MySQL
  • 回答数1
  • ありがとう数1

みんなの回答

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちは。 いろいろと記憶薄な上に、PHPでの経験ですが。。。 まだ回答がついていないようですので、参考程度に書き込みをば。 >>文字化け関係はしんどいかと思いますが そうですね。確かに。 しんどいと思うところに漠然とした回答を書き込むのも気は引けますが。。。 >>●cgi保存形式は全てUTF8(BOM無し。有だとエラー) >>●HTML出力は >>●show variables like 'char%'; を実行した結果 >>●照合順序 【出来る限りの箇所】で、「○○の文字コードでやってる」 とかって指定しておくことで解消できる。。。とかって過去にやった記憶がありますが、 上記以外の箇所で、思い当たる箇所は? おいら的には、「Perl上での文字コードの指定」と、「DB接続時?の文字コードの指定」 とか出来ないっけ?(HTML出力。の文字コード指定、と、サーバ言語処理時の文字コード指定。は別であったかと。 って感じですかね。 PHPだと、こんなんだったような気はします。気はします。 http://saboten009.blogspot.jp/2008/01/phpmysqlutf-8.html 。。。参考程度に。。。はい。

happypudding
質問者

お礼

解決いたしました! 結局はPerlでDBIモジュールを使用する際、そこでもutf8の設定が必要とのことでした。 文字化けの問題は本当にやっかいです・・・。

happypudding
質問者

補足

ご回答ありがとうございます!参考でも大変うれしいです! 以下返信 DB接続時、PHPではmysql_set_charset を入れるだけで解決するとききました。しかしPerlでの記述方法がわかりません・・・。 SET NAMESはセキュリティ上、極力使いません。 Perlでは use utf8;を使用しております。

関連するQ&A

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

    お世話になっております、ぷりんと申します。 下記の投稿をしましたが、解答が得られませんでした・・・。 しかしいろいろ調べているうちに、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
  • phpmyadmin文字化けについて

    user_id user_name   mail comment create_datetime    del_flag 4 てst てst 2011-02-13 06:12:50    0 5 あああッ て    2011-02-13 06:15:14     0 このような感じで文字化けします [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 の設定もしました 照合順序をtf8_unicode_ciにしました 色々ググッたのですがこのくらいしか設定するものがでてきませんでした ブラウザはchromで見ていますブラウザ側もutf-8になっています 他にもfirefox IEでも同じ結果でした 他に設定するべき項目があったらよろしくお願いします

  • phpMyAdminの文字化け

    いつもお世話になっております。 phpMyAdminで文字化けをしてしまいます。 文字コードは全てutf-8で統一しております。 (PHPファイル、データベース) (1)MySQLの設定を変更→解決せず -------------------------------------------------- # vi /etc/my.cnf ↓ ---------- ここから追加 ---------- ↓ [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 ↑ ---------- ここまで追加 ---------- ↑ :wq -------------------------------------------------- (2)phpMyAdminの設定を変更→解決せず -------------------------------------------------- $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultCharset'] = 'utf-8'; テーブルの照合順序とカラムの照合順序をutf8_unicode_ciに 変更いたしましたが、ダメでした。 -------------------------------------------------- (3)phpからデータベースに接続直後、SET NAME utf-8を実行→解決せず -------------------------------------------------- function db_conn() {  $db_link = @mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD));  if ($db_link) {   mysql_select_db(DB_DATABASE);   mysql_query('SET NAMES utf-8');   return $db_link;  } } ご教授お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Enterprise Linux ES[ v.4 ] MySQL:4.1.20 PHP:4.3.9

    • ベストアンサー
    • MySQL
  • MySQLとperlの連携で漢字文字化け

    MySQLにて漢字で登録したデータをperlを使用して持ってきて、 ブラウザで表示させると感じ部分が「?」になってしまいます。 文字コードはutf-8で統一しているつもりです。 mysql> show variables like 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | 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 | +--------------------------+--------+ ブラウザ側もページ情報の文字エンコーディングを見るとUTF-8となっています。 他にどのような要因が考えられますでしょうか。 よろしくお願いします。 使用OS CentOS 5.1 perlで持って来ているところ $sth = $db->prepare( "SELECT * FROM user_info WHERE name = '$uid'"); $sth->execute; @user_info = $sth->fetchrow_array; print "@user_info\n";

  • サーバー移転で文字化け

    ロリポップ!からhetemlにサーバー移転したところ、データベースから取り出したデータが文字化けするようになってしまいました。 因みにmysqlのデータは変換なしでエクスポートし、インポートしております。 ã€ã‚¨ãƒ´ã‚¡ã€‘ã½ã‹æ³ 上記のような文字化けです。 キャラクターセット周りが怪しいと思い、色々試してみましたが一向に治る気配がありません・・。 php varは5.3です。 .htaccessに「AddHandler php5.3-script .php」と記述して使っております。 mysql varはMySQL5.0.51aです。 MySQLのキャラクターセットはこんな感じです。 Variable_name Value 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 phpでの接続はこのようにしております。 mb_language('uni'); mb_internal_encoding('utf-8'); mb_http_input('auto'); mb_http_output('utf-8'); $con = mysql_connect('xxx','xxx','xxx') or die(mysql_error()); mysql_set_charset('utf8'); mysql_select_db('xxx') or die(mysql_error()); php.iniの設定は以下のとおりです。 mbstring.detect_order utf-8 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output pass mbstring.internal_encoding utf-8 mbstring.language neutral 何をやっても治らず、途方に暮れております。 ご助言をよろしくお願いいたします。

  • phpmyadmin 文字化け

    phpmyadmin 文字化けを開きテーブルを見ると日本語が化けてしまいます。 php のプログラムからは読み書き、表記は正しくできます。 いろいろ調べ以下をやったのですがだめでした。 「MySQLの設定」 # vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql old_passwords=1 default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 #skip-character-set-client-handshake ※最終的にコメントアウト [mysql] default-character-set = utf8 [mysqldump] default-character-set = utf8 MySQLをリスタートする。 # /etc/rc.d/init.d/mysqld restart 「phpMyadminの設定」 # vi /var/www/phpmyadmin/config.inc.php $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['FilterLanguages'] = ''; $cfg['DefaultCharset'] = 'utf-8'; $cfg['AllowAnywhereRecoding'] = TRUE; apache再起動 何か足りない点はありますでしょうか? 環境は以下です。 phpMyAdmin •バージョン情報: 3.5.1 (最新版) •サーバ: Localhost via UNIX socket •ソフトウェア: MySQL •ソフトウェアバージョン: 5.1.61 - Source distribution •プロトコルバージョン: 10 •ユーザ: root@localhost •サーバの文字セット: UTF-8 Unicode (utf8)

    • ベストアンサー
    • MySQL
  • phpMyadminの文字化けについて

    PHPでINSERTしたものをphpMyadminで確認すると 日本語が文字化けしています。 コマンドプロンプトでテーブルを見てみると文字化けは起こっていません。どこを変えればいいのでしょうか? いろんなサイトを参考にmy.iniを直してみてもだめでした。 ----- my.ini ------ [mysqld] default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 skip-character-set-client-handshake [mysqldump] quick max_allowed_packet = 16M default-character-set = utf8 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates default-character-set = utf8 ----- phpMyadmin ----- テーブルの照合順序 utf8_general_ci mysql> \s Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 バージョンは以下のとおりです。 XAMPP 1.7.1 MySQL 5.1.33 PHP 5.2.9 phpMyadmin

    • ベストアンサー
    • MySQL
  • データが文字化けします。

    データが文字化けします。 PHPと MySQL の勉強を始めたばかりの初心者で、昨日今日と検索で調べてみたのですが、書いてあることがまだほとんど理解できない状態です。 入門書に載っていた、入力フォームからデータを入力したものを、データベースに追加するというものを試してみたのですが、 日本語を入力して、サーバーのphpMyAdminからデータを確認すると文字化けしてしまいます。 ですが直接、Myadminの画面から日本語を入力した場合は文字化けしません。 関係ありそうなものとして SHOW VARIABLES LIKE 'character_set%'; で確認したところ 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 となっていました。 入力フォームのページもUTF-8 で書いています。 何か設定変更などが必要なのでしょうが、どこをどうやって良いのか分からない状態です。 関係のありそうな情報を記載しておきます。 phpMyAdmin - 2.10.1 MySQL クライアントのバージョン: 5.1.22-rc サーバのバージョン: 5.1.22-rc MySQL の文字セット: UTF-8 Unicode (utf8) MySQL の接続照合順序: utf8_unicode_ci サーバーは、phpの勉強をするために coreserver というところのレンタルサーバを契約しました。 PHPとMySQLの勉強を始めたばかりなのに、いきなり最初の内から四苦八苦しております。 どうかご教授お願い致します。 *また皆様のお手を煩わせることが少なくなるよう、初心者向きの関連の良書ございましたら、そちらもお知らせいただければと思います。 現在、「Head First PHP&MySQL」という本で勉強中です。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpMyAdminで文字化け

    MySQLを3.27→5.0にしました。 PHPからデータベースに書き込むと、3.27のときは普通に書き込めたのですが、 5.0になったら文字化けしてしまいます。 コードは全てUTF-8で統一しています。 phpMyAdminは $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_unicode_ci'; $cfg['Lang'] = 'utf-8'; $cfg['DefaultCharset'] = 'utf-8'; と設定をしています。 どのようにすれば文字化けがなくなるのでしょうか?

    • 締切済み
    • PHP
  • phpMyAdminで文字化け

    PHP5.2.4、MySQLバージョン4.1.16、phpMyAdmin 2.11.1を使用しています。 php側でInnoDBのテーブルを作成して日本語の値を挿入した状態です。 php側では表示などしても文字化けしてないのですが、 phpMyAdminで日本語で登録されているカラムを見ると文字化けしています。 phpMyAdminで日本語の値で更新し直すと、文字化けせずにちゃんと表示されます。 mysqlの設定ファイルで #character-set-server = latin1 #collation-server = latin1_general_ci default-character-set=utf8 skip-character-set-client-handshake として再起動してテーブルを作成し直したのですが文字化けは直りません・・・ 何が原因なのでしょうか? phpMyAdminのテーブルオプション ストレージエンジン:InnoDB 照合順序:utf8-general_ci

    • 締切済み
    • PHP