• ベストアンサー
  • 困ってます

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パターン切り替えて  実行しましたが文字化けや空文字が登録されました。 どなたか対処方法をお分かりの方はお教えください。 よろしくお願いします。

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

  • 回答数1
  • 閲覧数265
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1
  • moousi
  • ベストアンサー率70% (21/30)

文字化けは、3つの局面での確認が必須だと思います。 ・サーバー設定 ・データ入力 ・データ表示 サーバー設定は、show variables like 'char%'で確認できますが、これは提示していただきました。 データ入力時の状況は、insertするSQL文とPHPソースを提示していただきました。 そのPHPファイルがutf8で保存されたものかどうかはわかりませんでした。 utf8以外の場合、変換してあげる必要があります。 データ表示して確認した時の状況は、提示されていませんでした。 正しく格納されていても、たとえば中国語などのエンコードで見れば文字化けしてしまいます。

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

質問者からのお礼

こんにちは。 返信が遅くなり申し訳ありません。 ご指定いただいた内容を確認しました。 ファイルの内容は「Shift-JIS」にて保存されていました。 そのため「UTF-8」で保存をしました。 「UTF-8」に保存をして再度実行しましたら、無事に文字化けをせず 登録が出来ました。 本当に助かりました。 ありがとうございました。

関連するQ&A

  • MySQL+PHP文字化け

    PHPからMySQLを使っています。 MySQLもPHPも文字コードはutf8を使っているのですが、PHPMyAdminから入力した日本語を普通に読み出すと文字化けして「??????」になってしまいます。また、自作コードからの日本語のinsertもできません。 しかし、「set character set utf8」を先に実行しておくといずれも上手くいきます。 これは一体どういうことなのでしょうか? そもそも全てutf8で統一しているつもりなのですが、MySQLかクライアントのどちらかで他のコードが使われているということなのでしょうか? MySQLはstatusなどを見てもutf8になっているので、どちらかと言えばクライアントの方が臭うのですが、よくわかりません。 どうか知恵をおかしください。

  • MAMPのMySQLで文字化けする

    すみません、教えてください(><) mac( os X 10.7.5)でMAMP+Eclipse+PHPを使って以下のようにMySQLにデータ挿入 mysql_connect('localhost','root','root') or die(mysql_error()); mysql_select_db('mymy'); mysql_query('SET NAMES UTF-8'); mysql_query('INSERT INTO item SET id=1, name="あいうえお"'); をしたのですが、 phpMyadminからデータを確認してみると日本語が文字化けしてしまいます。 (phpMyadminからデータを挿入した場合はちゃんと表示されます。) 色々と調べ、 Eclipseの環境設定でワークスペースの文字コードやphpの文字コードをUTF-8にしたり、 MySQLのmy.cnfファイルの中に以下 [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_unicode_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 を追加して再起動し、DBを一旦削除して再度作り直して挿入してみたりとやったのですが、改善されません。 サーバ接続の照合順序 は「utf8_general_ci」として作成しています。 コンソールからMySQLへ接続してDBの文字コードを確認してみると character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /Applications/MAMP/Library/share/charsets/ | というかたちになっています。 他にどういった点を改善すればいいのでしょうか? もうお手上げ状態でどうすることも出来ずにいます。。。

  • MYSQLの文字化けについて

    MYSQLの文字化けについて質問させてください。 MYSQL COMMAND LINE CLIENTでMYSQLに作ったデータベースに下記のSQL文でデータを入れると、下記のエラーが出ます。 sql 「insert into テーブル名 (id、type)values (1,'男性’);」 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'type’at row 1 文字化け対策として、調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysqldump] default-character-set =utf8 ちなみにその他情報です。 MySQLのバージョン MySQL 5.1 MySQLで有効になっている文字コード 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 何かお解かりになることがありましたら、宜しくお願いします。

  • PHPの文字化けについて

    いつもお世話になってます。 以下の様な問題が発生しておりまして、 何か解決するための情報がありましたらご提供頂けませんでしょうか。 ------------ PHPで、テキストボックスと登録ボタンを配置した簡単な入力フォームを作成しました。 (登録ボタン押下後は入力した文字を消すことはせず、 DB側に登録した内容をテキストボックスに表示するような形式です。) ところがテキストボックスに「能」と言う文字を入力すると、 文字化けを起こし、「??」と言う文字が表示されます。 「一」や「日」などは問題ありませんでした。 これは2byte文字の変換に失敗している所為と考え、文字コードについて調べました。 PHP側からは全てutf8の文字コードでデータを送信しています。 DB側の文字コードは以下のようになっていました。 >show variables like 'character\_set\_%'; 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 ujis character_set_system utf8 各種サイト様を参考にしたところ、 character_set_server が ujis となっているのが問題のような気がしています。 ですが、本DBは学校で借りているレンタルサーバを使用しているため、 my.cnf等直接ファイルを修正することが出来ません。 なので、以下のサイト様を参考にSQL発行の際には必ず SET character_set_server = utf8; も発行するようにしてみたのですが、上手くいきませんでした。 http://thesnowcolor.blogspot.jp/2010/10/phpmyadmin.html 自ら試したのはここまでです、何かほかに調べたほうがよい、 などありましたら情報のご提供宜しくお願い致します。 【PHP環境】 Apache 2.2.3 PHP 5.1.6 MySQL 5.0.45 (※他、必要情報ありましたらご指摘お願いします)

    • ベストアンサー
    • PHP
  • mysqlの文字化けについて

    さくらサーバーのプレミアムプランで、MYSQLが文字化けを起こして困っています。 MYSQL5.1、データベースの文字コードはUTF8です。 UTF8でエンコードされたPHPプログラムからデータをINSERTすると文字化けを起こします。 ハッスルサーバーで同じ環境を再現すると、文字化けは起こしません。 違いは、ハッスルサーバーでは、「character_set_server utf8」になっているのに対して、 さくらサーバーでは、「character_set_server ujis 」となっています。 この、ujisをutf8に変更すれば解決しそうに思うのですが、変更の仕方がわかりません。 アドバイス頂けましたら、幸いです。

  • mysqlの文字化けがどうしても治らない

    MAMPにてMYSQLを導入しています。 Mac os x snow leopard10.6.8 php5.3.6 mysql5.5.9 apache2.2.21 文字コードを確認すると最初はlatin1となっているため、ネットで調べ対処してみました。 対処した内容としては、以下になります。 (1)/MAMP/db/mysql/ にリネームしたmy.confを置く。 (2)[mysqld]に、default-character-set=utf8とskip-character-set-client-handshakeを追加。 (3)[mysql]に、default-character-set=utf8を追加。 その後再起動し、文字コードを確認してみたところ、以下の2つがどうしてもlatin1のままです。 character_set_database character_set_server 他にも対処してみたのですが、どうしてもこの2つだけがlatin1のままです。 どういった対処をすれば文字化けを解消できますか? どうが、解消法をご教示戴けないでしょうか。 宜しくお願いします。

  • MySQLとPHPで日本語が文字化けする。

    MySQLとPHPでアプリを開発中です。 MySQLに登録済の日本語文字列データをPHPでselectして echoを使ってクライアント(Windows XP)のブラウザに表示させると、 文字化けします。 全角文字がすべて半角の '?' になります。 MySQLの状態を調べるために以下を実行しました。 SHOW VARIABLES LIKE 'char%'; 結果は以下のとおりでした。 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/mysql5.0.51a/share/mysql/charsets/ PHPの内部エンコードはUTF-8です。 php.iniの関連設定は以下のとおりです。 default_charset = "UTF-8" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = "none" mbstring.encoding_translation = On extension_dir = "/usr/local/lib/php/extensions" extension=php_mysqli.dll extension = gd.so extension = mysqli.so extension = xmlrpc.so MySQLもPHPもすべてUTF-8で統一したので問題ないはずだと 思ったのですが? 半角アルファベットは問題なく表示されます。 サーバー側OSはSolarisです。 MySQLから正しくデータを得られていないように思えるのですが。 ヒントでも結構ですから教えていただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPとmysqlでの文字化けについて

    現在PHPとMySQLを利用したwebシステムを作成しています。 しかし文字化けが発生して困っています。こちらの環境は PHP5.1.4 MySQL5.1.11 phpMyAdmin - 2.8.0-rc1 レンタルサーバー(xrea)を使っています。 自分でいろいろと調べたところ文字のエンコードはujisに統一したほうがいいとのことまではわかりました。 show variables like "char%"; を実行したところ character_set_client utf8 character_set_connection sjis character_set_database ujis character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 このように表示されます。 PHPの方も <?php header('Content-Type:text/html; charset=EUC-JP'); ?> や <?php $str = mb_convert_encoding($str, "EUC-JP", "auto"); ?> を実行しても日本語の部分は???で表示されてしまいます。 いろいろと調べたのですが、さっぱり原因がわかりません。 よろしくお願いします。

  • mysqlの文字化けの対処

    MAMPにてMYSQLを導入しています。 Mac os x snow leopard10.6.8 php5.3.6 mysql5.5.9 apache2.2.21 文字コードを確認すると最初はlatin1となっているため、ネットで調べ対処してみました。 対処した内容としては、以下になります。 (1)/MAMP/db/mysql/ にリネームしたmy.confを置く。 (2)[mysqld]に、character-set-server=utf8とskip-character-set-client-handshakeを追加。 (3)[mysql]に、default-character-set=utf8を追加。 その後再起動し、文字コードを確認してみたところ、以下の2つがどうしてもlatin1のままです。 character_set_database character_set_server 他にも対処してみたのですが、どうしてもこの2つだけがlatin1のままです。 どういった対処をすれば文字化けを解消できますか? どうが、解消法をご教示戴けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • mysqldumpでリストアし一部外字が文字化け

    mysqldump  &#8211;default-character-set=utf8 でバックアップしてたsqlファイルを mysql &#8211;default-character-set=utf8 でインポートしWEBを開いてみたら 一部の外字が文字化けしてしまいました。 nkfでバックアップのsqlファイルの文字コード調べてみると、EUCJP-winとなっていました。 既に元のDBはサーバークラッシュの為無い状態です。 どなたかご教授お願い申し上げます。 <元DBの環境> OS:Windows2003Server DB:MySQL5.0 PHP:5.0 <リストアするDBの環境> OS:windowsXP DB:MySQL5.0 PHP:5.2