(PHP & MySQL) DBはMySQLで文字コードがEUC-JPです。


UTF-8で書かれたPHPスクリプトから日本語、英語以外で入力しDBに保管した場合、文字化けしてしまいます。


どうすれば文字化けせずに保管し、再度PHPで表示できるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/06/12 10:03:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:tenshiks No.1

回答回数52ベストアンサー獲得回数1

多分この辺りではないでしょうか?

接続後に「SET NAMES ujis;」とクエリを流してやってください。


http://question.excite.co.jp/kotaeru.php3?q_id=2117214


若しくはmy.cnf、win鯖ならmy.iniの[mysqld]の下辺りに

skip-character-set-client-handshake

を追加してみてください。


http://d.hatena.ne.jp/secondlife/20051031/1130724806

id:esecua

接続後に「SET NAMES ujis;」とクエリを流してやってください。 とはどういう意味でしょうか?

mysql_query()で実行のようですが方法まで詳しくお願いします。

2006/06/07 03:24:30
id:aiaina No.2

回答回数8179ベストアンサー獲得回数131

PHPスクリプト,HTMLファイルの文字コードはすべてEUC-JPにしておきます。

HTMLファイルのメタ属性で

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

と追加しておくといいでしょう。

文字化けの大半は上記が正しく指定されていないのに原因があります。

id:esecua

全く意味が異なります。

2006/06/07 11:15:21
id:tenshiks No.3

回答回数52ベストアンサー獲得回数1

通常のSELECT等のクエリと同様

mysql_connect()関数でDBに接続した後、他のクエリを流す前に。

mysql_query('SET NAMES ujis;');

としてください。


pearDBを使っているのであれば。

DB::connect()の後に、$db->query('SET NAMES ujis;');

ですね。

id:esecua

よく考えたらぜんぜん違うような。。。

日本語と英語の入力は全く問題ないのです。ただ韓国語や中国語などを入力すると文字化け(?????と表示される。)するのでその対処方法を教えてください。

2006/06/07 11:14:50
id:vector_xenon No.4

回答回数113ベストアンサー獲得回数4

1-3の方は勘違いしているようですが、3の方法でujisではなくutf8とするとうまく保管できると思います。

2の方法だと日本語、英語以外の文字が表示できませんので。

id:esecua

ん~mysql_query()で実行してみたのですが韓国語などは???????と表示されていしまいます。

PHPスクリプトではDB内の文字化けを防ぐためにUTF-8からEUC-JPに変換して保存しています。

mb_convert_encoding($hatena, "EUC-JP", "UTF-8");

表示する際はこの逆です。

又Phpmyadminからは保存できるのですがPHPスクリプトから表示すると文字化けします。

何かいい方法はないでしょうか?

2006/06/07 23:49:25
id:worstman No.5

回答回数121ベストアンサー獲得回数6

MySQLにアクセスする際、つまりINSERTとかUPDATEとかSELECTする前に


SET NAMES 'utf8';


というコマンドを実行してあげてみてはどうでしょう。

id:esecua

ん~mysql_query()で実行してみたのですが韓国語などは???????と表示されていしまいます。

PHPスクリプトではDB内の文字化けを防ぐためにUTF-8からEUC-JPに変換して保存しています。

mb_convert_encoding($hatena, "EUC-JP", "UTF-8");

表示する際はこの逆です。

又Phpmyadminからは保存できるのですがPHPスクリプトから表示すると文字化けします。

何かいい方法はないでしょうか?

2006/06/07 11:24:14
  • id:cube_tamayura
    韓国語が含まれる文字列を、UTF8 から EUC-JP(EUC-KR等とは別物)に変換する事はできない。
    何故ならEUC-JPの中に韓国語の文字セットは含まれていないからだ。
    一旦EUC-JPに変換して保存してしまったら、復元する事ができない。

    その点誰も突っ込みを入れていないので、むしろこのトピックを読んでいて自分の考えが
    間違っているのかと真剣に悩んだ。

    *****

    現実的かどうかはおいておいて、Base64エンコードした文字列をDBに保存し、
    出力の際デコードすれば文字コード関係ないと思う。
    大規模なプログラムであれば面倒かもしれないけれど。

この質問への反応(ブックマークコメント)

トラックバック

  • 文字コードの問題 i_kumagoroの日記 2006-06-07 12:34:36
    question:1149614341 MySQLとPHPのバージョンくらいは書いていてもバチは当たらないと思う。 対策としてはMySQLがutf-8に対応しているのなら5の回答者の通り。多分。対応していないならDBに入れる
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません