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

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

解決済みの質問

mysql_query文字コード変換について教えてください。

PHP+MySQLで開発を行っておりますが、次の問題でつまずいて
先に進めず困っております。
お助け下さい

環境
Server : Windows2003Server
PHP : 4.4.1
MySql : 4.0

<<<<< PHPソース >>>>>>>>>>>>>>>
// MySQLに接続
if (!($cn = mysql_connect("localhost","userXXX","PassXXX"))) {
die('接続できませんでした: ' . mysql_error());
}
// MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES 'sjis'")
or die("can not SET NAMES sjis");
// MySQL DB 選択
if (!(mysql_select_db("dbXXX"))) {
die('データベースが見つかりません.');
}
// MySQL 問い合わせ
$sql = "SELECT * FROM test";
if (!($rs = mysql_query($sql))) {
die('セレクトに失敗しました.');
      ・
      ・
      ・
<<<<< PHPソース >>>>>>>>>>>>>>>

上記の環境でソースを実行すると、「can not SET NAMES sjis」の
メッセージでエラーとなります。
この関数をとると処理は最後まで正常終了するのですが、
表示される漢字は、文字化けしています。

ちなみにMySQLの5.0環境で実行すると問題なく変換されて正しく
表示されます。
MySQLの4.0環境では mysql_query("SET NAMES 'sjis'") の
関数は使えないのでしょうか?
もし使えないとするならば、何か変わりの方法があると良いのですが
表示する時に項目ごとに変換する mb_convert_encoding を
使う方法はあると思うのですが、出来たら手間をかけたくないのと
MySQLの4.0環境とMySQLの5.0環境両方でなるべく変更を少なく
実行したいと思っております。

どなたか、お分かりの方がおられましたら是非ご教授下さい。 

投稿日時 - 2007-07-20 14:58:20

QNo.3184332

困ってます

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

> MySQLの4.0環境では mysql_query("SET NAMES 'sjis'") の関数は使えないのでしょうか?

その通りです。
クライアントの文字コード設定、SET NAMESは4.1以降の機能です。
4.0では知らないクエリがあったのでエラーが出たわけです。

> もし使えないとするならば、何か変わりの方法があると良いのですが
PHP側で文字コード変換をする必要がありますね。
mb_convert_encodingではなく、mb_convert_variablesを使えば変数丸ごと変換出来るのでそれほど手間はありません。入出力のところを関数化(せいぜい数行でしょう)しておき、共通関数とすれば良いと思います。

実際のところ、MySQLの文字コードが何であれ、それと違う文字コードでも入出力してもほとんど問題はおこりません。唯一問題があるとすれば、ORDER BYで日本語のカラムをキーにしてソートするときくらいです。

参考まで。

投稿日時 - 2007-07-20 17:39:21

お礼

taketan_mydns_jp様

早速のご回答ありがとう御座います。

早速試させて頂きましたが
確かに mb_convert_variables は使えそうです。
一括で変換できるところなどはなかなか便利ですね。

ただ残念なことにMySQLの5.0では使えないようです。
ほんとに悩まし物です、文字コード・・・
ここは妥協するしかなさそうですね。

ありがとう御座いました。

投稿日時 - 2007-07-21 08:39:41

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

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

回答(1)

あなたにオススメの質問