- ベストアンサー
my.iniとSET NAMES SJISについて
- my.iniとSET NAMES SJISについて教えていただきたいことがあります。
- my.iniとSET NAMES SJISの関係や効果について教えてください。
- SET NAMES SJISの使用について、PHPでも同じ効果があるのか知りたい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
my.ini の設定は、[mysqld]セクションは、defaultでは、utf-8 の文字コードで格納するという意味。tableやカラムごとに文字コードの変更も出来るけど、いちいち指定しないときは、server設定が使われる [mysql]セクションは、コマンドラインクライアントのmysqlで使用する文字コードの指定。 しかし、windows のコマンドプロンプトは、shift_jis を使っており、shift_jis以外の文字は、化けるし、MySQLへデータを送りつけるときもshift_jisなので、そのままだと、MySQL側で、utf-8ではない異常なコードと認識されて ?文字にされてしまう。 そこで、 SET NAMES SJIS; 「コマンドプロンプトから送付するデータはshift_jisだよ適宜変換して格納してね、また、こっちへ返すデータはshift_jisに変換しておいてね」という命令になる。 windows 用なら、my.ini の[mysql] の部分は、常にコマンドプロンプト用なので、以下のように書き換えておくと、MySQLサーバーへアクセスするたびに、SET NAMES SJIS; を打たなくても済むようになる。 [mysql] default-character-set = sjis >質問2:PHPでも、SET NAMES SJIS; を使用する 同じです。phpのソースファイルがshift_jisで保存されているなら、必要です。 でも、shift_jisでプログラムを保存するともっとややこやしい問題が発生するので、utf-8でファイル保存するのがベストでしょう。 それでも、windows版phpだと、 set names utf8; の発行が必要だったりしますけど。 参考 MySQL 多バイト文字問題 http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_38
お礼
ご丁寧に解説頂きありがとうございます。 的確にお答え頂き、かなり理解できました。 大変参考になりました。 ありがとうございました。