みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

my.iniとSET NAMES

my.iniとSET NAMES SJIS 
について教えていただきたいことがあります。


my.iniに以下設定を追加で行いました。

 [mysqld]
 character-set-server=utf8

 [mysqldump]
 default-character-set = utf8

 [mysql]
 default-character-set = utf8


データベースのAテーブルには、

No  商品    価格
1   冷蔵庫  1000
2   エアコン  800

というレコードが入っております。

コマンドプロンプトより、
1. cd C:\xampp\mysql\bin
2. mysql -u root -pnazonazo
の二つのコマンドを実行後、

mysql> Select * from A;

を実行したところ、日本語の商品列が文字化けしました。

 No  商品    価格
 1   文字化け 1000
 2   文字化け  800

そこで、色々調べて
1. mysql> SET NAMES SJIS;
2. mysql> Select * from A;

を実行したところ商品名の文字化けが直って表示されました。
 No  商品    価格
 1   冷蔵庫  1000
 2   エアコン  800

質問1:SET NAMES SJIS;により、コマンドプロンプトでの文字化け原因が
解消されたと思うのですが、なぜだか理由が分からないのです。
「my.ini」とどのような関係があるのでしょうか。
情報を見つけたページでは、おまじないということで書かれていたのですが
解決された理由を知りたいのです。

質問2:PHPでも、SET NAMES SJIS; を使用するときがあるみたいなのですが
同じ効果があるのでしょうか。

どなたかお分かりのかたがいらっしゃいましたら
ご教授お願いします。

投稿日時 - 2012-01-10 21:18:35

QNo.7237025

すぐに回答ほしいです

質問者が選んだベストアンサー

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

投稿日時 - 2012-01-11 20:26:32

お礼

ご丁寧に解説頂きありがとうございます。
的確にお答え頂き、かなり理解できました。

大変参考になりました。
ありがとうございました。

投稿日時 - 2012-01-12 06:16:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問