MySQL 5.0 (559レス)
前次1-
抽出解除 レス栞

303
(5): 2008/06/07(土)04:02 ID:??? AAS
質問させて下さい。

これまで、Linux上で動作させていたphpスクリプトをWindowsに以降しようとしているのですが
phpからMySQLにINSERT文を行ったのですが、文字化けしてしまいます。
どうすれば直りますでしょうか?

・WindowsXP(Pro)
・php-5.2.5-Win32.zip
・mysql-5.0.45-win32

1※
mysql> SET CHARACTER SET SJIS;
Query OK, 0 rows affected (0.00 sec)
省10
304
(1): 303 2008/06/07(土)04:09 ID:??? AAS
続きです。

2※phpスクリプト内部でINSERT文を実行する前に次のコードも入れています。
  mysql_query('set character set sjis',$dbHandle)
3※組み立てられたSQLを画面上に print(""); で確認すると正常に日本語が入力されています。
4※MySQLのデータ操作を行う際にCSEも使っているのですが、CSEよりテーブルを開き直接日本語
 を登録すると、その値は正常に日本語で登録されています。しかし、phpにて一覧出力すると ??? という
 具合に文字化けしてしまいます。

あと、追加で質問させて頂きたいのですが、コマンドラインからMySQLを再起動するには
何というコマンドを実行すればよいのでしょうか?ぐぐっても中々ヒットしませんでした。
因みに、GUIツールとして MySQL Query Browserを使用しているのですがここから再起動とかも出来る
省1
305
(2): 2008/06/07(土)06:46 ID:??? AAS
>>303,304
まず、my.iniの設定から見直してみよう。
その show variables の結果から、サーバがLatin1で起動されてるのが分かる。
create databaseやcreate table時の指定が分からんからなんともだが、そのまま作成したとしたなら、
仮に、"set names cp932"したところで、変更されるのは"connection"と"client"のみ。
なので、mysqldがデータを受け取った時に、内部の保存コードである"latin1"に変換をかけてしまう。
そこで、当然cp932(ms-sjis)はlatin1にマップ出来ないので文字列が壊れる。
回避策は、以下の件とも絡むので後述。

> コマンドラインからMySQLを再起動するには
の件だけど、恐らく、>>303のpathから見て、インストーラでデフォルト設定でinstallしたんだろうけど、
省8
308: 303 2008/06/07(土)15:37 ID:??? AAS
>>305さん
ご丁寧にレスありがとございます。
色々とお教え頂いた様に試してみたのですが相変わらず、文字化けしてしまします。

1.my.ini
[client]
default-character-set=sjis

[mysql]
default-character-set=sjis

[mysqld]
default-character-set=sjis
省11
309: 303 2008/06/07(土)15:43 ID:??? AAS
続きです。

3.php内部での文字コードの設定部分
mysql_query("SET NAMES sjis");

4.phpでテーブルより取得した値をsjisに変換した上で画面に出力
while($row = mysql_fetch_array($rs))
{

  /* 内部文字エンコーディングからSJISに変換 */
  $str = $row["NAME"];
  print("文字チェック1:[ ".$str." ] <br/>");
  $str = mb_convert_encoding($str, "SJIS");
省4
310
(1): 303 2008/06/07(土)17:57 ID:??? AAS
自己解決しました。

・・・MySQLってなかなか一癖ありますね。。。
思わぬ落とし穴がありました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.001s*