みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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) ) {

投稿日時 - 2007-01-16 17:22:29

QNo.2670680

すぐに回答ほしいです

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

Insert文記述スクリプト・ファイルをutf8で保存するか、
utf8変換した文字列をInsert文に組み込むか、

で良いと思います。

文字コードを処理毎に変える必要が生じます。
DBへInsertする時は、DBに合わせ、結果出力(例えばブラウザなど)する時は、HTMLのエンコードに合わせますね。
自分で全て設計できる場合は、全環境を同じ文字コードにしてしまうのも良いと思います。

投稿日時 - 2007-01-17 22:24:34

お礼

ありがとうございます。

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

本当にありがとうございました。

投稿日時 - 2007-01-18 17:17:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

mysql_query("SET NAMES ujis")

mysql_query("SET NAMES utf8")

か、

my.iniに
init-connect=SET NAMES utf8

を付け加えるかで、イケルと思います。

投稿日時 - 2007-01-17 00:27:53

補足

mysql_query("SET NAMES utf8")

上記でとりあえず文字化けは解消されましたが、データベースの方に日本語文字列のみ登録されなくなりました。

上記を記述しないと文字化けとなってしまいます。

『一難去って、また一難』と言った感じです・・・

投稿日時 - 2007-01-17 14:41:25

ANo.2

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を再起動後、確認してみてください。
的外れでしたらごめんなさい。

投稿日時 - 2007-01-16 17:45:44

ANo.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

投稿日時 - 2007-01-16 17:37:08