dポイントプレゼントキャンペーン実施中!

先日した質問の仕方が悪かったようなので、再度質問させていただきます。

アルファベット以外の文字を書き込んで実行ボタンを押すと(下の例だと、Aの後ろに「様」といれてます。)、実行された SQL クエリーには「様」が表示されず、結果「N」や「?」というレコードが残ってしまいます。

あと、下記のメッセージが出てくる時もあります。

もしわかる方がいらっしゃれば教えて頂ければ幸いです。

コードの問題かと思い、php.iniやmy.iniで設定を行っているつもりなのですが、うまくいきません。
下記メッセージと設定内容
Warning: mb_strpos(): Unknown encoding or conversion error. in C:\apachefriends\xampp\phpmyadmin\libraries\string.lib.php on line 100

Warning: mb_strpos(): Unknown encoding or conversion error. in C:\apachefriends\xampp\phpmyadmin\libraries\string.lib.php on line 100

Warning: mb_strpos(): Unknown encoding or conversion error. in C:\apachefriends\xampp\phpmyadmin\libraries\string.lib.php on line 100
実行された SQL クエリー:
INSERT INTO member( email, keitai, name, futan ) VALUES( 'ggg@ggg.com', 0, 'A', 100 )

設定内容は、
my.ini
[client]
default-character-set=ujis
local-infile=1

[mysqld]
default-character-set=ujis
local-infile=1
set-variable=lower_case_table_names=0


php.ini
default_carset="EUC-JP"

[mbstring]
mbstring.language=Japanese
.internal_encoding=EUC-JP
.http_input=auto
.http_output=EUC-JP
.encoding_translation=Off
.detect_order=ASCII,SJIS,EUC-JP,JIS,UTF-8
.substitute_character=none;

A 回答 (3件)

大体何が起きているかがわかりました。



(1)MySQLバージョンを4.0でなく、4.1か5.0を使用している。

(2)phpMyAdminのトップページの
MySQL 接続照会順序が、"utf8_general_ci"
になっている。


もしgoohajimete様の実行環境が、
上記に当てはまりましたら、おそらくこういうことです。↓

MySQL4.1以降からは、データベース、テーブル単位で、文字コードが設定できるようになりました。しかも問い合わせ時に文字コードを自動変換してくれるという機能がつきました。

phpは、my.iniを読み込みませんので、my.iniで設定された文字コードは無視されます。
では、どの文字コードがベースになるかというと、本家MySQLABのサイトからダウンロードできる4.1のWindows版は、文字コード=laten1でコンパイルされているため、なんと、laten1がベースになります。


ご指摘のINSERT文を入力すると、なぜか、Mysqlは、UTF-8(またはlaten1?)と判断し、これをEUC-JPに変換しようとします。

入力文字 → UTF-8 → EUC-JP

こうして、日本語が破壊されます。


では、結論として、どうやったら良いかというと、

INSERT文の前に、
SET NAMES ujis;
と入力し、つづけてSQL文をいれます。(;セミコロンを忘れずに。。。)


たとえば、

SET NAMES ujis;INSERT INTO member( email, keitai, name, futan ) VALUES( 'ggg@ggg.com', 0, 'A', 100 );

というように。。。
(基本的に、われわれ日本人が、MySQL4.1以降を使用する時は、このSET NAMES ××× が付きまとうことになりそうです。

ただ、文字コードはEUC_JPしか使わず、
4.1のサブクエリなどの新機能を我慢できるのでありましたら、MySQL4.0系がもっとも安定しておりますので、
こちらをお使いになってもいかがとは思います。
ネット上の情報から察するに、
MySQL4.1では、かなり皆さん苦労されているようですので。。。

この回答への補足

copymaster様

詳しいご説明大変有難うございます。
また返事が送れて大変失礼しております。
バージョンを確認するだけで手間がかかっていたのですが、
お察しの通り、

phpMyAdmin 2.6.0-pl3
MySQL 4.1.8

というバージョンでした。
ただ、ご指摘のように下記のように対応しましたが、
やはりうまくいきませんでした。

SET NAMES ujis;INSERT INTO member( email, keitai, name, futan ) VALUES( 'ggg@ggg.com', 0, 'A様', 100 );
で実行してもやはり、実行してもらえず、(漢字部分の「様」が抜けて実行されしてしまいます。(下記のように)

SET NAMES ujis;INSERT INTO member( email, keitai, name, futan ) VALUES( 'ggg@ggg.com', 0, 'A', 100 );

やはりバージョンを4.0にするしかないのでしょうか。
遅れた手前再度質問するのも恐縮なのですが、お時間のある時にでも教えていただけると幸いです。

補足日時:2005/09/09 01:12
    • good
    • 0

Warning:が出なくなったところで、


半分解決ですね。

環境をまだお聞きして
いなかったので、ご確認です。

(1)使用しているOSは?WindowsそれともLinux?

(2)PHP、MySQLのそれぞれのバージョンは?
(3)SQLを実行している場所は?
 たとえばphpMyAdminを使ってweb画面上から
 実行しているのでしょうか。

 もし、phpMyAdminの場合、
 config.inc.phpの、言語設定が、
 $cfg['DefaultLang'] = 'en-iso-8859-1';
 ではなく、
 $cfg['DefaultLang'] = 'ja';
  になっていますでしょうか?

この回答への補足

ご質問大変有難うございます。
下記に補足いたします。

(1)windows
(2)phpMyAdminでweb上より
(3)'ja'に変更してます。最初はen-iso-8859-1だったので、変更ましたが、依然漢字が表示されない状態です。

何かわかりましたら教えて頂けると幸いです。

補足日時:2005/08/31 00:27
    • good
    • 0

php.iniの、



mbstring.encoding_translation = On

でどうでしょうか?

この回答への補足

早々のご回答ありがとうございます。

しかし残念ながら、上記のように設定してみましたがうまくいかず、同様の結果になってしまいました。
(ただ、今回はエラーメッセージは出ず、
「実行された SQL クエリー:
INSERT INTO member( email, keitai, name, futan ) VALUES( 'xxx@ccc.com', 0, 'A', 100 )」
と表示されます。

(Aのあとに様という漢字をつけて実行してはいますが、実行ボタンを押すとやはり様の字が抜けてしまいます。)
何か他に考えられる原因はありますでしょうか。

補足日時:2005/08/28 00:24
    • good
    • 0

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