• ベストアンサー
  • すぐに回答を!

MySQL 文字化けについて(PHP)

いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数184
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.4

Insert文記述スクリプト・ファイルをutf8で保存するか、 utf8変換した文字列をInsert文に組み込むか、 で良いと思います。 文字コードを処理毎に変える必要が生じます。 DBへInsertする時は、DBに合わせ、結果出力(例えばブラウザなど)する時は、HTMLのエンコードに合わせますね。 自分で全て設計できる場合は、全環境を同じ文字コードにしてしまうのも良いと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 問題を解決することができました。 問い合わせを行うSQLをutf8に変換をしていなかったため問題が発生していたようです。 本当にありがとうございました。

その他の回答 (3)

  • 回答No.3

mysql_query("SET NAMES ujis") を mysql_query("SET NAMES utf8") か、 my.iniに init-connect=SET NAMES utf8 を付け加えるかで、イケルと思います。

共感・感謝の気持ちを伝えよう!

質問者からの補足

mysql_query("SET NAMES utf8") 上記でとりあえず文字化けは解消されましたが、データベースの方に日本語文字列のみ登録されなくなりました。 上記を記述しないと文字化けとなってしまいます。 『一難去って、また一難』と言った感じです・・・

  • 回答No.2
noname#31558
noname#31558

MySQLの設定ファイルの文字コードの設定が問題ではないでしょうか? 私も同じように文字化けしておりましたが、下記のように設定したところ文字化けが解決しました。★マークの部分を環境に合わせてチェックしてみてください。 -------------- [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock default-character-set=ujis ←★ init_connect="SET NAMES ujis" ←★ # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 [mysql.server] user=mysql basedir=/var/lib default-character-set=ujis ←★ [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysqldump] default-character-set=ujis ←★ [mysql] default-character-set=ujis ←★ -------------- mysqldを再起動後、確認してみてください。 的外れでしたらごめんなさい。

共感・感謝の気持ちを伝えよう!

  • 回答No.1

コマンドでの方法は分かりませんが 下記の方法で直った記憶があります。 1. "//\MySQL\MySQL Server 4.1\my.ini"を開く  *デフォルト設定のままであれば"C:\Program Files\MySQL\MySQL Server 4.1\my.ini" 2. my.ini内の[mysqld]以下に下記一文を追加する。   default-character-set=utf8 skip-character-set-client-handshake 3. 上書き保存を行い、MySQLのサービスを再起動する。 *コマンドプロンプトでの再起動コマンド 停止 net stop mysql 起動 net start mysql 4. MySQLに接続し、『 status; 』を確認する。 5. 以下のステータスに変更されているかを確認する。 Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • php db 文字化け

    文字コードEUC-JPで開発しています。 題名の通り文字化けします。 どうやらDBからselectやinsertしたときに文字化けをするようです。 selectですと文字化た値が取れますし、 insertでは文字化けするためinsertできずエラーとなります。 sql直前で mysql_query("set names EUC-JP"); も行っています。 テーブルの文字コードはオプションで eucjpms -- UJIS for Windows Japanese としています。 個別に該当カラムもそうしています。 何がまずいでしょうか?

    • 締切済み
    • PHP
  • 文字化けが解消できません…MySQL5.2.1

    OS:WINDOWS XP MySQL5.2.1 Apache2.2.4 php-5.2.1 文字(EUC-JP使用) PHPからテーブルにINSERTした場合、echoできちんと表示できます。 しかし、コマンドプロンプトを開いてテーブルを見ると、 PHPからINSERTした日本語が文字化けしています。 コマンドプロンプトにINSERTで日本語を入力すると、 Query OK と表示されますが、SELECT * FROM で内容を表示すると、 空白で何も表示されません(PHPのechoでも表示されません) 色々調べてみたのですが…どうしても解決できません… 【my.ini】 [client] port=3306 default-character-set=ujis [mysql] default-character-set=ujis [mysqld] port=3306 basedir="c:/mysql5/" datadir="c:/mysql5/data/" default-character-set=ujis init-connect="SET NAMES ujis" skip-character-set-client-handshake [mysqldump] default-character-set = ujis 【SHOW VARIABLES で確認した文字コード】 character_set_client ujis character_set_connectioon ujis character_set_database ujis character_set_filesystem binary character_set_results ujis character_set_server ujis character_set_system utf8 試しに mysql> SET NAMES ujis と入力したりしてみましたが 文字化けしたままになっております。 SHOW CREATE DATABASE と SHOW CREATE TABLE で表示された CHARACTER SETは ujis でした。 my.iniの character-set を ujis に設定した場合、 日本を表示させることはできないのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 文字化け:xamppを利用したphpとmysqlの組み合わせで・・2

    環境  Windows XP  ApacheFriends XAMPP (basic package) version 1.6.6a 再々投稿です。もう本当にお手上げ状態です・・・ (http://oshiete1.goo.ne.jp/qa4147638.html) hrm_mmm様、いろいろとありがとうございました。 下記設定でも、文字化けが発生します。 XAMPPで文字化け解決された方、いらっしゃいませんか? 何かヒントをお願いします・・・助けてください。 ★mysql★ #This File was made using the WinMySQLAdmin 1.4 Tool #2008/07/09 10:24:05 #Uncomment or Add only the keys that you know how works. #Read the MySQL Manual for instructions [mysql] default-character-set =ujis [mysqld] default-character-set =ujis skip-character-set-client-handshake basedir=C:/xampp/mysql #bind-address=xx.xx.xx.xx datadir=C:/xampp/mysql/data #language=C:/xampp/mysql/share/your language directory #slow query log#= #tmpdir#= #port=3306 #set-variable=key_buffer=16M [WinMySQLadmin] Server=c:/xampp/mysql/bin/mysqld-nt.exe user=root password=1234 [mysqldump] default-character-set =ujis ★PHP★ [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = PASS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 7 ★ソース★ $dbconnect = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die("サーバーに接続できません"); // データベース セレクト mysql_set_charset("ujis"); mysql_query("SET NAMES ujis",$dbconnect) or die("文字設定ができません"); mysql_query("SET CHARACTER SET UJIS",$dbconnect) or die("文字設定ができません"); mysql_select_db(DB_NAME,$dbconnect) or die("データーベースに接続できません"); ソースは全てEUCで記述しています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • php mysqlについて

    初心者です宜しくお願いします。 phpからデータベースを使いたいのですが(mysql)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • MYSQLとの連動のselect文で

    $dbh = @mysql_connect( $host , $id , $pw ); mysql_select_db( $id , $dbh ); mysql_query( "SET NAMES UJIS" ); $str = "select * from login_data where sid = '$sid' and spass = '$spass'";   $result = mysql_query( $str ); $rec = mysql_fetch_array( $result ); 上記のようにDBに登録されているidとpassの一致した情報を取り出したいのですが、「$result」が何を入れてもfalseになってしまいます。 「$str」をprintで出力したものを直接phpmyadminのSQLに流し込むと普通に情報を取ってこれるのですが、プログラムのmysql_query()がうまく動きません。 どなたかお分かりになる方いましたら是非教えていただけませんでしょうか。 よろしくお願い致します。

    • 締切済み
    • PHP
  • MySQLの文字化け

    WindowsServerでPHPとMySQLで作成したプログラムを動かしています。 PHPからINSERTでMySQLに登録すると環境依存文字(「(株)・(有)など)が「?」になってしまいます。 PHPからSELECTでブラウザ上に表示させると文字化けはしていませんが、phpMyAdminで確認すると「?」になっています。 このデータベースの内容を他のサーバーに移すときに、phpMyAdminからエクスポートまたはmysqldumpすると「?」のままエクスポートして、他のサーバーでインポートしても当然「?」になってしまいます。 環境依存文字が文字化けしない、あるいは他のサーバーでも環境依存文字をそのまま移行できるようにはできないでしょうか。 よろしくお願いします。 PHPはEUC-JP、データベースはujisで作成しています。 INSERTの直前でSET NAMES UJISを実行しています。

    • ベストアンサー
    • MySQL
  • 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
  • 更新時の文字化けに関して

    初歩的な質問で申し訳ありませんが、教えて下さい。 以下のようにSQL文を作成し、更新処理をしようとしたところ、 どうも文字化けして更新できませんでした。 そもそもの文字設定の基本を把握できていないのが問題ですが、、、 どこの何を設定すれば良いでしょうか? よろしくお願いします。 《DB内容 (MySQL)》 項目 name varchar(50) 照合順序 sjis_japanese_ci 《プログラム内容(phpで記述)》 //データベース接続 $con = mysql_connect("localhost", "root", "999999"); // php_dbデータベースへ接続する if (!$con) { die('接続できませんでした: ' . mysql_error()); } $str = 'あいうえお'; $sql = "UPDATE tbl_ABC set name = '$str'"; if (!mysql_select_db('db_abc', $con)) { echo 'Could not select database'; exit; } $result = mysql_query($sql,$con); mysql_query("set names sjis"); if (!$result) { echo "DB Error, could not query the database\n"; echo 'MySQL Error: ' . mysql_error(); exit; } mysql_close($con) ;

    • ベストアンサー
    • PHP
  • phpからMySQLへの日本語文字化けについて

    phpからMySQLへの日本語文字化けについて こんにちは。お分かりの方は教えてください。 現在、「ハッスルサーバー」を利用しwebのphpからMySQLサーバーへの 情報登録画面を作成しています。 登録内容で数値やメールアドレスなどの「1バイト文字」ですと 問題ないのですが、日本語の「2バイト文字」ですと文字化けが 発生してしまいます。 phpやMySQLに知識が無いため色々と調べて試したのですが 正しく登録できませんでした。 試した結果とサーバー/DBの状況は以下の通りです。 ※サーバー/DB ・バージョン:5.0.90-log ・文字セット:UTF-8 Unicode (utf8) ・接続照合順序:utf8_general_ci ・種別:MyISAM ・Variable_name:Value ・character_set_client:utf8 ・character_set_connection:utf8 ・character_set_database:utf8 ・character_set_filesystem:binary ・character_set_results:utf8 ・character_set_server:utf8 ・character_set_system:utf8 ・character_sets_dir:/usr/local/share/mysql/charsets/ ※phpファイルにて試した設定 //接続 $objCon = mysql_connect(C_SERVER, C_USER, C_PASSWORD); //文字コード // mysql_query("SET NAMES SJIS"); ←文字コードを左の2パターンで // mysql_query("SET NAMES UTF8"); ←どちらかに切り替えて実行しました。 //データベース $objSecDB = mysql_select_db(C_DB_NAME); //**********SQL(Insert)**********// $strSql = ""; $strSql = $strSql . "Insert Into XXXXX "; $strSql = $strSql . "("; $strSql = $strSql . "KeyNo,"; $strSql = $strSql . "E_Mail,"; $strSql = $strSql . "Title"; $strSql = $strSql . ") "; $strSql = $strSql . "Values "; $strSql = $strSql . "("; $strSql = $strSql . " " . mysql_real_escape_string($intKeyNo) . ", "; //KeyNo $strSql = $strSql . " " . mysql_real_escape_string($strEmail) . ", "; //E_Mail $strSql = $strSql . "'" . mysql_real_escape_string($strTitle) . "' "; //Title $strSql = $strSql . ")"; //SQL発行 $blnRet = mysql_query($strSql); ・上記のソース内に記しましたが文字コードを2パターン切り替えて  実行しましたが文字化けや空文字が登録されました。 どなたか対処方法をお分かりの方はお教えください。 よろしくお願いします。

    • ベストアンサー
    • MySQL