ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

初心者PHP講座コミュのPHPmyadminの文字化けで困っています。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
php(utf-8)を使ってmysqlで簡単なサイトを作ってみましたが,
日本語をフォームから入力して、表示するとき、ブラウザではまったく問題ないのですが、
phpMYadminでデータベースを開くとの日本語部分が文字化けして読めません。

ローカルでは問題ないので、サーバーの問題かとおもい、
他のサーバーにphpとsqlをテストでコピーしてみましたら大丈夫でした。

何かの設定かと思い、
mysql> SHOW VARIABLES LIKE 'char%';でチェックし比べてみたところ
正常のものは
character set client utf8
character set connection utf8
character set database utf8
なのに

文字化けするほうは
character set client latin1
character set connection latin1
character set database latin1
でした。文字コードのデフォルトが違うからだと思い、ググって見たところ、
結構よくある問題で、my.cnf でデフォルト文字設定を変更すると解決するとありました。

でも、使っているサーバーはレンタルサーバーであるのでmy.cnfはさわれないのでは???

サーバー会社に連絡して変更可能かと聞いたところ、my.cnfを変更することはできません。またデータベースのサポートはいたしません。と冷たく返答。サーバー会社を変えたいところですが、自分が借りたサーバーではないのでそのまま使うしかありません。

ただ、sqlコマンドからALTER DATABASE <your_database_name> CHARACTER SET utf8 COLLATE utf8_general_ci でcharacter set databaseのみutf8になりました。(文字化けは一緒)

character set connection とcharacter set database をmy.cnfをいじらず、sqlコマンドで変更可能なのでしょうか?もし、無理ならばどのような方法があるのでしょうか?

$sql = "SET NAMES utf8";はコネクション時につかってます。
試しに
mb_language("uni");
mb_internal_encoding("utf-8"); //内部文字コードを変更
mb_http_input("auto");
mb_http_output("utf-8");もいれてみましたが一緒でした

お知恵がありましたらよろしくお願いします。

コメント(6)

以前、同じ問題に直面したのですが、以下の通りにしたら解決できましたので、以下の通りの設定で試してみてください。

mysqlのbin->my.cnf」、もしかしたらmysql/binary/mysql.iniファイルを開いて以下のものを追加してくだいさい。

[mysqld]
character_set_server = utf8
skip-character-set-client-handshake (←任意、明記しなくても、php側でデータの呼出し時に、文字コーディングタイプを指定すれば、文字化けしない)

[mysql]
default-character set = utf8
篤坂さん、返信ありがとうございます。

ただ、レンタルサーバーの場合、my.cnfも.iniも触ることができませんよね?
設定に関しては、phpMyadminのSQLのコマンドからの入力しか触れないと思うのですが?

あと、質問にも書きましたが、サーバー会社ではタッチしてくれませんでした。
phpMyAdminから文字化けする、ということですよね。
つうことは、phpMyAdminの文字コードがどうなってるか、じゃないのかなーと漠然と思ったり。

phpMyAdminはサーバ会社で提供されているものでしょうか?
別のディレクトリにphpMyAdminをアップロードして、configの文字コードを書き換えるのじゃダメなのかなーと。

文字コードまわりは、問題の切り分けに経験を要するところが多くて、実際に見てないサーバの状況だと想像でしか解答できないので、論点ズレてるかもしれませんがご容赦ください。

尚、その利用してるサーバ名を検索語句に含んで(たとえば「さくらインターネット」だとして)、「phpMyAdmin さくらインターネット 文字化け」と検索すれば同様の状況で悩んでる人の記事が見つかるかもしれません。
。ちふみん=¢いわささま
ありがとうございます。

phpMyAdminの文字設定(チャラクターセット)はlatin1です。
文字化けを防ぐには、ここをutf-8にしたいのですが。。。

phpMyAdminはサーバー会社がすでにインストールしてあり。
それを利用するだけです。

テストでロリポップに全部コピーしましたら正常に表示しました。
phpMyAdminの文字コードをチェックするとデファルトでutf-8でした。

問題が発生しているサーバーは北米のものなのであまり、日本語を利用するお客がすくないのだとおもいます。



ロリポップではなくて、その北米のテストサーバに、自身でダウンロードしてきたphpMyAdminのファイルをアップして、config(*)を書き換えたら同じ現象が生じますか?つまり、北米のサーバに最初から用意しているphpMyAdminは使わず、自分でアップしたphpMyAdminを利用すればいいんじゃないですか?てなことを書いたのですが、伝わっていますか?

*phpMyAdminのルート以下にあるconfig.inc.phpのこと
。ちふみん=¢いわささん
アドバイスありがとうございます。

結果的には、どちらの表示もなんとか正常に日本語になりました。
少しふにおちないのですが…

きっとまだよく文字設定について良くわかっていないからだと思いますが、これで使ってみます。

myadminより、SHOW VARIABLES LIKE 'char%';でキャラクターチェック
character set client latin1
character set connection latin1
(自分のサイトはutf8で作成中)

myadminに、直接set name utf8; SHOW VARIABLES LIKE 'char%';でキャラクターチェック
character set client utf8
character set connection utf8
になったが、他のクエリーを実行するとすぐまた、自動でlatin1に戻る。
(phpファイルのheader()にて $sql = "SET NAMES utf8";してクエリを実行している)


データを入れるphpページのinsert命令前に set names utf8をいれ、クエリーさせる。
→文字化け。


myadminより、ダイレクトにset name utf8とinsert文を入れてみる。
データは同様に文字化け


myadminより、ためしにinsert文のみ入れてみる。
phpmyadmin内の文字は日本語へ、ただ、ブラウザの表示がこんどは文字ばけ。


headerで設定していたサーバーにコネクトする際にいつも、set name utf8
をさせていたコードを削除。
両方日本語へ。

という感じです。
サーバーとのやりとりの際のキャラクターセットをすべてコメントアウトしてしまいました。
結果問題ないみたいなので、とりあえずこのまま組んでいこうと思います。
どうしてもutf8の指定が必要な部分のみコードをセットしようかと思います。

色々ありがとうございました。


ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者PHP講座 更新情報

初心者PHP講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング