- ベストアンサー
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)
- 専門家の回答
質問者が選んだベストアンサー
Insert文記述スクリプト・ファイルをutf8で保存するか、 utf8変換した文字列をInsert文に組み込むか、 で良いと思います。 文字コードを処理毎に変える必要が生じます。 DBへInsertする時は、DBに合わせ、結果出力(例えばブラウザなど)する時は、HTMLのエンコードに合わせますね。 自分で全て設計できる場合は、全環境を同じ文字コードにしてしまうのも良いと思います。
その他の回答 (3)
- mooboogie
- ベストアンサー率68% (28/41)
mysql_query("SET NAMES ujis") を mysql_query("SET NAMES utf8") か、 my.iniに init-connect=SET NAMES utf8 を付け加えるかで、イケルと思います。
補足
mysql_query("SET NAMES utf8") 上記でとりあえず文字化けは解消されましたが、データベースの方に日本語文字列のみ登録されなくなりました。 上記を記述しないと文字化けとなってしまいます。 『一難去って、また一難』と言った感じです・・・
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を再起動後、確認してみてください。 的外れでしたらごめんなさい。
- pinky_mint
- ベストアンサー率30% (3/10)
コマンドでの方法は分かりませんが 下記の方法で直った記憶があります。 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
お礼
ありがとうございます。 問題を解決することができました。 問い合わせを行うSQLをutf8に変換をしていなかったため問題が発生していたようです。 本当にありがとうございました。