• 締切済み

漢字や平仮名の文字をSQLで実行するにはどうすればよいでしょうか。

先日した質問の仕方が悪かったようなので、再度質問させていただきます。 アルファベット以外の文字を書き込んで実行ボタンを押すと(下の例だと、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;

みんなの回答

回答No.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では、かなり皆さん苦労されているようですので。。。

goohajimete
質問者

補足

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にするしかないのでしょうか。 遅れた手前再度質問するのも恐縮なのですが、お時間のある時にでも教えていただけると幸いです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

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';   になっていますでしょうか?

goohajimete
質問者

補足

ご質問大変有難うございます。 下記に補足いたします。 (1)windows (2)phpMyAdminでweb上より (3)'ja'に変更してます。最初はen-iso-8859-1だったので、変更ましたが、依然漢字が表示されない状態です。 何かわかりましたら教えて頂けると幸いです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

php.iniの、 mbstring.encoding_translation = On でどうでしょうか?

goohajimete
質問者

補足

早々のご回答ありがとうございます。 しかし残念ながら、上記のように設定してみましたがうまくいかず、同様の結果になってしまいました。 (ただ、今回はエラーメッセージは出ず、 「実行された SQL クエリー: INSERT INTO member( email, keitai, name, futan ) VALUES( 'xxx@ccc.com', 0, 'A', 100 )」 と表示されます。 (Aのあとに様という漢字をつけて実行してはいますが、実行ボタンを押すとやはり様の字が抜けてしまいます。) 何か他に考えられる原因はありますでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 漢字や平仮名の文字をSQL実行できません。

    漢字や平仮名の文字をSQL実行できません。 下記のメッセージが出てくるのみで、平仮名が表示されなかったり、??と表示されたり、うまく表示されません。 どうすればよいでしょうか。 おそらく、コードの問題かと思い、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;

  • Fedora7+PHP+MySQLで文字化け

    すみません、表題にてPHP側でCSVファイルをINSERTで登録していますが、どうしても文字化けしてしまいます。 Fedoracore7 PHP5.2.2 MySQL5.0.37 phpMyAdmin2.11.0 <php.ini> mbstring.internal_encodein = EUC-JP mb・・・output = EUC-JP <my.cnf> [client]、[mysqldump]、[mysql]ともに default-character-set = ujis [mysqld] default-character-set = ujis skip-character-set-client-handshake init-connect = SET NAMES ujis 色々と調べてEUC-JP(ujis)で統一してるつもりなのですが・・・ phpmyadminでは文字化けは解消してまして、こちらでレコードを登録すると、PHP側では文字化けなしで表示されます。 PHP側での書き込みは、 mb_convert_encoding($val,"EUC-JP","SJIS") で行っていますが、文字化けが解消されません。 どなたかご教授頂ければと思い、質問させて頂きました。 宜しくお願いします。

    • 締切済み
    • PHP
  • php,mysqlでの文字化け(機種依存文字)について

    機種依存文字「○いち」「(株)」の文字化けがどうしても解消できません。 phpソースに機種依存文字をコーディングした場合には正しく表示されますが、外部より入力した文字をMySQLに格納し、phpにてデータを取り出し表示すると文字化けします(phpmyadminでの表示時点で文字化け)。 「mb_convert_encoding」等にてテストしてみましたが、結果は変わりませんでした。また、phpmyadminにて直接MySQLに入力しても、phpmyadminでもブラウザ(php表示)でも文字化けしてしまいます。 文字コードについて知識が浅く、各環境はデフォルト状態です。 「mbstring.internal_encoding = EUC-JP 」にも関わらず、「character_set_client = utf8」「character_set_results = utf8」としているのに、機種依存文字以外は問題無く表示されております。 1.機種依存文字化けの対応方法 2.正しい環境設定方法(文字コードの統一を行うべき等) ご教授のほど、何卒宜しくお願い致します。 <<環境>> ・windows xp ・UNIX socket 4.1.22 ・phpMyAdmin - 2.11.1 ・Mysql 4.1.21 ・PHP 4.4.7 【Mysql】 character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_results = utf8 character_set_server = ujis character_set_system = utf8 【my.cnf】 [client] default-character-set = ujis [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis 【php.ini】 mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; ※phpソースには「charset=euc-jp」を記載

    • 締切済み
    • PHP
  • phpMyadminと文字コード

    PHPとMySQLのインストールをxampp(ver1.6.7)を使って行いました。文字コードはEUC-JPを使いたいので、資料を片手にmy.iniにdefault-character-set=ujisとskip-character-set-client-handshakeを追加しました。 コマンドプロンプトからMySQL Monitorを使ってshow variables like 'char%';と打ってみると、次のように表示されます。 +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | ujis | | character_set_filesystem | binary | | character_set_results | ujis | | character_set_server | ujis | | character_set_system | utf8 | | character_sets_dir | c:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ と、ここまではいいのですが、phpMyadminのトップの画面には相変わらず「MySQL の文字セット: UTF-8 Unicode (utf8) 」と表示されるます。これは無視してもかまわないのでしょうか。phpMyadminを使って入れたデータをPHPで表示するとちゃんと表示されます。

    • ベストアンサー
    • MySQL
  • WADAXからロリポップへDBのコピー

    お世話になります。 先日からWADAXからロリポップ内のサーバーへDBをエクスポート・インポートしているのですがどうも上手くいかず困っています・・・。 ■WADAX・・・PHP5 phpMyAdmin:2.10.0.2 ■ロリポップ・・・PHP5 phpMyAdminの2.6.0 具体的なエラーとしてはWADAX側でメールなどのやり取りの入ったデータ(Message.sql)をエンコードなどなしのnonでエクスポートし、その後ロリポップ側の「SQL」からインポートしたところ、 「Warning: mb_strpos(): Unknown encoding or conversion error. in /home/sites/lolipop.jp/web/pma/libraries/string.lib.php on line 112」 「#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=utf8' at line 30」 などと英文エラーが出てしまい、見る限り文字化けをしている様子でした。 (1)phpMyadminのバージョンが違う場合はインポートエクスポートが上手くいかないのでしょうか? (2)その他何か解決策などあればアドバイス頂けると嬉しいです(x_x;) よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPがローカル環境でのみ文字化けする

    PHPをApache2.0上でローカルテストすると、ブラウザ表示がどうにも文字化けしてしまいます。 EUCで組んだスクリプトをmb_convert_encodingでSJISに変換して出力しているのですが、本番用のサーバーではきちんと動作するのに、ローカル環境ではブラウザがEUCと認識してしまっているようで、文字化けが発生します。 99%php.iniかapacheの設定がおかしいのですが、どこがおかしいか見てはいただけないでしょうか。 php.iniのそれっぽい部分 mbstring.encoding_translation = Off mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; ;mbstring.func_overload = 0 なお、Apacheのhttpd.confにAddDefaultCharset項目はありませんでした。 特殊要因としてApacheがXAMPPの中で制御されていることなのですが、php.iniはApacheのbinディレクトリ内のものを編集しています。 以上です。 どうかよろしくお願いします。 WinXP SP3 PHP 5.28 Apache 2.0 XAMPP 1.7.0 ※ApacheとXAMPPはPleiadesにてEclipseを導入したときについてきたもの。

    • ベストアンサー
    • PHP
  • phpMyAdminでPHPのエラーのようなものが出てしまう

    WordPressを使いたいため、現在MySQLとphpMyAdminでデータベースの構築をしているところなのですが、phpMyAdminにアクセスするとPHPのエラーが発生していしまいます。 何か回避方法はありませんでしょうか? エラー↓ Warning: require_once(./libraries/dbi/.dbi.lib.php) [function.require-once]: failed to open stream: No such file or directory in D:\04WebServer\public_html\phpMyAdmin\libraries\database_interface.lib.php on line 18 Fatal error: require_once() [function.require]: Failed opening required './libraries/dbi/.dbi.lib.php' (include_path='.;C:\php5\pear') in D:\04WebServer\public_html\phpMyAdmin\libraries\database_interface.lib.php on line 18 よろしくお願いします。 Windows 2000 Server 04WebServer最新版 PHP 5.25 SQL 5.0(5.0.67) phpMyAdmin 2.6.4-pl2 http://drestyle.dip.jp/test.php

    • ベストアンサー
    • MySQL
  • MySQLインサートで文字化け

    初めてXAMPPを使って、Windowsローカル上でシステムを作っているのですが、MySQLへINSERTするとどうしても文字化けを起こしてしまい困っています。(その他のHTML表示は問題ありません) 本番用のサーバーがEUC-JPなのでEUC-JPでやらなければならず、まずはMySQL等の設定ファイルを下記サイトに従ってむりくりEUC-JPに変えました。 http://phpspot.net/php/pgMySQL4.1%8CnEUC-JP%82%CC%8F%EA%8D%87.html http://cl.pocari.org/2006-06-17-1.html PHP呼び出しをして返ってくるHTTPヘッダーはいつもUTF-8のようなのでApache/conf/下のhttpd.confをいじろうと思ったのですが外部confファイルのInclude記述ばかりで該当箇所が分かりません。 環境は以下の通りです XAMPP Windows版 Version 1.6.4 Apache Version Apache/2.2.6 (Win32) php ver PHP: 5.2.4/php4互換モードにて使用 phpMyAdmin - 2.11.1 * MySQL クライアントのバージョン: 5.0.45 □phpMyAdmin上の設定 言語 - Language: 日本語-Japanese (euc) MySQL の文字セット: EUC-JP Japanese (ujis) MySQL の接続照合順序:eucjpms_japanese_ci □Apache Environment HTTP_ACCEPT_LANGUAGE ja,en-us;q=0.7,en;q=0.3 HTTP_ACCEPT_CHARSET Shift_JIS,utf-8;q=0.7,*;q=0.7 □PHPの設定 mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input EUC-JP mbstring.http_output EUC-JP mbstring.internal_encoding SHIFT-JIS mbstring.language Japanese mbstring.strict_detection Off mbstring.substitute_character no value そもそも設定環境として難しいのでしょうか・・ どなたか勘所のある方宜しくお願いします。

    • ベストアンサー
    • PHP
  • 同じサーバー内で異なる文字コードで作成したスクリプトの実行について

    お世話になります。 LinuxでPHP4を使い、文字コード「EUC版」のwikiを利用していました。 今度、CMSのインストールを検討しているのですが、使いたいCMSでは UTF-8版しかありません。 同じサーバーの中で、複数の文字コードのPHPのスクリプトを実行する ことは出来るのでしょうか? php.iniの設定が必要な場合は、どの用に設定したらよいのでしょうか? 今は、php.iniの中で、mbstring.internal_encoding = EUC-JPと設定しています。

    • ベストアンサー
    • PHP
  • PHP5.1 + APACHE2 + PostgrSQL8.1 + Eclipse3.2で全角文字の文字化けが

    お世話になります。PHP暦5日その内3日はこの問題で悩んでいます。 EUCとSJISが混在していることが原因だと思うのですが、 その先が進みません。 過去ログなどを読み、EUCに統一することが望ましいことが分かり、 そのつもりで挑戦しているのですがダメダメ君です。 現状では、 PostgrSQLから読み出したデータはEUCで PHP内でprintやechoなどで文字を出力するとSJISとなります。 文字化けを解決する方法お願いします。 ちなみにphp.iniはこんな感じです。 php.ini -------------------------------- default_charset = EUC-JP extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 「MFC-J6583CDW」のコピー速度が遅く、また「写真モード」から「標準モード」への切り替えができない問題について相談です。
  • 質問者は、「写真モード」から「標準モード」への変更ができないという問題に直面しています。設定画面で指定ができないため、困っています。
  • 質問者は、「MFC-J6583CDW」のコピー速度が遅く、また「写真モード」から「標準モード」への切り替えができないという問題について質問しています。
回答を見る