取り込んだtxtデータが上手く表示されません。 - PHPプロ!Q&A掲示板

2542

  • 0P

取り込んだtxtデータが上手く表示されません。

質問日時 / 2010年2月17日 23:12    回答数 / 8件

Questioner:  vodka  このエントリーをはてなブックマークに追加 

キーワード / mysql    utf-8    取りこみ   

CSVファイルの拡張子を.txtに変更してTeraPadで文字コードがUTF8だということを確認しました。
MY.iniなどを文字コードをUTF8に設定してtxtデータを取り込みました。
取りこみ字はエラーが無かったんですが、
「SELECT * FROM テーブル名」を実行すると、文字化けして表示されます。
おそらくSJISで表示されていると思うんですが、
MYSQLの文字コードはUTF8で取りこみデータの文字コードもUTF8なんですが、なぜこのような現象が起こるのでしょうか?
PHPソースでテキストボックスに入力した名前からSQL文でSELECTしたいのですが、おそらくMYSQLが文字化けしているためSELECTできません。
原因が分かる方教えてください。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix>おそらくSJISで表示されていると思うんですが、
 ┗A01-1vodka回答ありがとうございます。 phpスクリプトの文字コ
  ┗A01-1-1shimix>mb_internal_encoding()ではUTF8と表示されました。
   ┗A01-1-1-1vodka回答ありがとうございます、 説明不足だったかもしれ
    ┗A01-1-1-1-1shimix>SET NAMSE UTF8 をコマンドしても文字化けして表示
     ┗A01-1-1-1-1-1vodka遅くなり申し訳ありません。 コマンドプロンプトはSJ
      ┗A01-1-1-1-1-1-1shimix>上記の内容がよく分かりません。コマンドか何かでし
       ┗A01-1-1-1-1-1-1-1vodka大変遅くなりました。 今週は忙しくて遅くなりました

回答一覧

並び替え:

A01
answerershimix [2月17日 23:59]

>おそらくSJISで表示されていると思うんですが、

「ブラウザの文字エンコーディングをSJISに変更したらキチンと表示された」ということでいいんですね?

>MYSQLの文字コードはUTF8で取りこみデータの文字コードもUTF8なんですが、

phpスクリプトの文字コード(mb_internal_encoding)は何でしょう?またMySQLクライアントの文字コードは(mysql_set_charsetで)指定されていますか?

#MySQL4.1以降はテーブルの文字コードが何であれ「クライアントの文字コード」に
#変換して返してきます。

この意見に回答する

ツリーへ TOPへ

A01-1
replyervodka [2月18日 22:11]

回答ありがとうございます。
phpスクリプトの文字コード(mb_internal_encoding)は何でしょう?またMySQLクライアントの文字コードは(mysql_set_charsetで)指定されていますか?

mb_internal_encoding()ではUTF8と表示されました。
MYSQLはmy.iniを修正しUTF8に変更しました。

MYSQL文で SELECT * FROM テーブル名 で文字化けしているとうことはコマンドプロンプトはUTF8で表示していないと思うんですが、SET CHARRSET UTF8で命令しても文字化けは直りません。
なぜでしょうか?

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [2月18日 23:13]

>mb_internal_encoding()ではUTF8と表示されました。

スクリプトはutf-8で書かれていますか?スクリプトからリテラルを表示させて(ブラウザのエンコードがSJISで)化けないのであれば、mb_internal_encodingやmysql_set_charsetでSJISを指定しないといけないと思いますが・・。



>MYSQL文で SELECT * FROM テーブル名 で文字化けしているとうことは
>コマンドプロンプトはUTF8で表示していないと思うんですが、

え?コマンドプロンプトの話ですか?コマンドプロンプトのdefaultは(日本語環境では)SJISです。chcpだけ実行すると932(cp932つまりsjis)が返ると思います。utf-8にしたければchcp 65001を実行してください。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyervodka [2月19日 12:15] (最終編集:2月19日 12:20)

回答ありがとうございます、
説明不足だったかもしれないんでもう一度書きます。
詳しく書くと、
my.iniを修正しMYSQLは文字コードUTF8にしたと思っています。(もしかしたら設定不足かもしれませんが。)
カンマ区切りのtxtデータもUTF8で作成されています。
コマンドプロンプトより取り込みは失敗しませんでした。
失敗しなかったのでUTF8でtxtデータをMYSQLに取り込めたと思っています。
いざSELECT文を実行するとUTF8の文字をSJISに変換したように文字化けします。
SET NAMES UTF8をコマンドしても文字化けは直りませんが、SET NAMES SJISをコマンドすると文字化けせずに表示されます。


コマンドプロンプトの初期表示はSJISと教えていただきましたがそれならSELECT文を実行しても文字化けするのは分かりますが、SET NAMSE UTF8 をコマンドしても文字化けして表示されるのかよく分かりません。
無知ですみませんが、よければ教えてください。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1
replyershimix [2月19日 12:40]

>SET NAMSE UTF8 をコマンドしても文字化けして表示されるのかよく分かりません。

データベースがUTF-8でクライアントをUTF-8にすれば「変換なし」で返されますから、SET NAMESを投げる意味はありません。

SET NAMESはクライアントの文字コードを指示するだけです。つまりクライアントがSJISであれば、SJISで設定しないと(UTF-8のまま返されるので)文字化けします。

#で、chcpは試されました?

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyervodka [2月22日 12:18]

遅くなり申し訳ありません。
コマンドプロンプトはSJISで表示しているのでUTF8に変更すればいいんですよね?

>>#で、chcpは試されました? 

上記の内容がよく分かりません。コマンドか何かでしょうか?

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1
replyershimix [2月22日 14:47]

>上記の内容がよく分かりません。コマンドか何かでしょうか? 

すでに前のレスで

>コマンドプロンプトのdefaultは(日本語環境では)SJISです。chcpだけ実行すると932(cp932つまりsjis)が
>返ると思います。utf-8にしたければchcp 65001を実行してください。

と書いたのですが、見落とされました?


あっと・・。ただしフォント設定をしないと日本語表示が出来ないかもしれません。"chcp 65001"で検索すればHitすると思います。

(例) http://d.hatena.ne.jp/perlcodesample/20080706/1215291523

まぁ、phpスクリプトとはあまり関係のない話(phpスクリプトであればmysql_set_charsetでクライアントの文字コードを指定すれば済む)ですけど(汗

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1-1
replyervodka [2月27日 16:58]

大変遅くなりました。
今週は忙しくて遅くなりました。申し訳ありません。
アドバイスありがとうございます。
MySQLの表示だけで問題がないということが分かりました。
いろいろとありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)