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

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

解決済みの質問

mysql登録時の文字化け

PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか?


ちなみに、現在の文字コードは
HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PHP開始時に
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");

ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC

mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci


ファイルの保存形式はutf-8(BOMなし)


SQL文のデータ部分にmb_convert_encodingを使用
例:
insert into test(test1,test2) values(
mb_convert_encoding("テスト1","EUC-JP","UTF-8"),
mb_convert_encoding("テスト2","EUC-JP","UTF-8"))


よろしくお願いします

投稿日時 - 2010-03-09 15:38:36

QNo.5737938

すぐに回答ほしいです

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

とりあえず、
mb_convert_encoding("テスト1", "EUCJP-win", "UTF-8")
としたら機種依存文字も?にならなくなるかとおもいます。

投稿日時 - 2010-03-11 01:18:43

お礼

回答ありがとうございます。


早速、以下のように試してみましたがDBには?で登録されていました。

insert into test(test1,test2) values(
mb_convert_encoding("テスト1", "EUCJP-win", "UTF-8"),
mb_convert_encoding("テスト2", "EUCJP-win", "UTF-8"))

投稿日時 - 2010-03-11 09:39:24

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

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

回答(3)

ANo.3

適切な答えは出来ませんが、僕も似たようなトラブルがあったので念のため。

SQL文のカラム名をバッククオートでくくると回避できたりしませんか?

僕はPostgreSQLからMySQLへ変更する際にでくわしたのですが、元のテーブルのカラム名にMySQLの予約語が含まれていて、MySQL仕様のバッククオートでくくる処理を行なったら回避できました。

ちょっととんちんかんな答えなのかもと思いつつ・・・

投稿日時 - 2010-03-16 11:43:20

ANo.1

とりあえず、あれ?と思った部分だけ、ツッコみ入れておきます。

> mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci

> SQL文のデータ部分にmb_convert_encodingを使用
> 例:
> insert into test(test1,test2) values(
> mb_convert_encoding("テスト1","EUC-JP","UTF-8"),
> mb_convert_encoding("テスト2","EUC-JP","UTF-8"))

EUC-JP で DB に 書き込んでないですか。これ。

投稿日時 - 2010-03-09 16:03:45

お礼

回答ありがとうございます。

登録フォーム画面もDBも文字コードをUTFー8にしてあるので、そのまま登録できると思ったのですがその場合は?ではなく完全な文字化けになってしまったので上記のような変換をおこなっています。
確かに、普通に考えたらおかしいのですがなぜか環境依存文字以外は文字化けせずに登録されています。

投稿日時 - 2010-03-09 17:08:36

あなたにオススメの質問