重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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; を使用するときがあるみたいなのですが
同じ効果があるのでしょうか。

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

A 回答 (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# …
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2012/01/12 06:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す