• ベストアンサー

MySQL5で文字化け…

PHP5とMySQL5を使っているのですが、ブラウザでDBから取得したデータを見ると、全て?????になってしまいます。ブラウザではEUC-JPで表示していますが、MySQLの文字セットがUTF-8になっているせいでしょうか?レンタルサーバなのでMySQLの文字セットは変えられないといわれました。 mb_string_encodingも試しましたがだめでした。 ほかに設定方法はないでしょうか? どなたか対応策教えてください。よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数5

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

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

MySQL5なら、データベースやテーブル単位に文字コードが変えられます。CREATEするときに設定すればOKです。 MySQLの文字コードがUTF-8でも、 データベースがEUC_JPなら、EUC_JPの文字列を ぶっこめます。 また、PHPで、MySQLとEUC_JPでお話するときは、 SELECT するまえに、 SET NAMES ujis; というコマンドを、SELECT文 と同じ要領で、mysql_query()で実行すればよいです。

dalianse
質問者

補足

SELECT の前にSET NAMES ujisで解決しました。ありがとうございました。が、 ふとUPDATEとかINSERTのときは大丈夫なんだろうかと思ったのですが、特に何も気にせずに、例えばフォームからの日本語とか入れてしまって問題ないですか?

その他の回答 (1)

回答No.2

もちろん、UPDATE とか、INSERTとかのときも必要です。 私は、データソースや、MySQLに接続する処理は、一つのファイルにまとめて、MySQLを使うページからは、そのファイルをincludeしていますが、そこに一緒に SET NAMES ujis; も書いてあります。 ただ、毎回SQLを走らせるたびごとに必要というわけではなく、コネクションを張っているあいだは、有効なので、1ファイル(他のページをinculudeしていればそれらを全部あわせた"1ページ")の先頭に一回実行されればOKと思います。

関連するQ&A

  • MySQL文字コード

    DB情報をHTMLで表示する場合に、mb_convert_encoding()で指定する文字コード MySQL5.1 PHP5 HTML - shift_jis MySQL の文字セット UTF-8 Unicode (utf8) MySQL の接続照合順序: ujis_japanese_ci フィールドの照合順序 ujis_japanese_ci PHPプログラムでDB情報取得後にSJISに変換 mb_convert_encoding($String, "SJIS", "●●●"); ●●●の文字コードを何を指定すればいいのかがわかりません。 EUCを書くとうまくいってるような気もしますが、なぜEUCでうまくいく のかもわかりません。 ご教授下さい。

    • 締切済み
    • PHP
  • 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")) よろしくお願いします

    • ベストアンサー
    • PHP
  • MySQL4.0 UTF-8 での文字化け

    こんにちは MySQL4.0 & PHP4.3 でHTMLは文字コードUTF-8で記述しています。 MySQL4.0の文字コード設定はレンタルサーバーのため不明ですが、 phpMyAdminで、utf-8にてデータを入力しました。 select文でMySQLのデータを拾ってくると文字化けはおきないのですが PHP経由でPOSTされた値を使ってinsertやupdateをかけると文字化けしてしまいます。phpMyAdmin上でも文字化けしていますが、phpMyAdminをEUC-JPにすると、入力した文字が文字化けせずに表示されます。 (が、すでに入っているデータは文字化けします、、、、) 入力画面は metaでUTF-8宣言をしており、ブラウザ(IE)上でエンコードを確認するとUnicode(UTF-8)になっています。4.1みたいにset names を指定するとうまくいくかな?と思ったのですが、やっぱり4.0なので結果は変わらず、でした。PHPのスクリプトそのものは、UTF-8で記述しているのですが、、、、 どういった項目をみなおせばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • php,mysqlでの文字化け(機種依存文字)について

    機種依存文字「○いち」「(株)」の文字化けがどうしても解消できません。 phpソースに機種依存文字をコーディングした場合には正しく表示されますが、外部より入力した文字をMySQLに格納し、phpにてデータを取り出し表示すると文字化けします(phpmyadminでの表示時点で文字化け)。 「mb_convert_encoding」等にてテストしてみましたが、結果は変わりませんでした。また、phpmyadminにて直接MySQLに入力しても、phpmyadminでもブラウザ(php表示)でも文字化けしてしまいます。 文字コードについて知識が浅く、各環境はデフォルト状態です。 「mbstring.internal_encoding = EUC-JP 」にも関わらず、「character_set_client = utf8」「character_set_results = utf8」としているのに、機種依存文字以外は問題無く表示されております。 1.機種依存文字化けの対応方法 2.正しい環境設定方法(文字コードの統一を行うべき等) ご教授のほど、何卒宜しくお願い致します。 <<環境>> ・windows xp ・UNIX socket 4.1.22 ・phpMyAdmin - 2.11.1 ・Mysql 4.1.21 ・PHP 4.4.7 【Mysql】 character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_results = utf8 character_set_server = ujis character_set_system = utf8 【my.cnf】 [client] default-character-set = ujis [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis 【php.ini】 mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; ※phpソースには「charset=euc-jp」を記載

    • 締切済み
    • 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 utf8、php・euc-jp で出力すると、[~]が文字化けする

    タイトルの通りです。 mysqlの文字コードはutf8なのですが、phpはeucで出力しています。 DBに格納されている文字は文字化けせずに、きちんと表示されているのですが、出力すると「~」が「?」に化けて表示されてしまいます。 mysql_query(”SETNAMES ujis″); や mb_language("Japanese"); mb_internal_encoding("EUC-JP"); mb_http_input("auto"); mb_http_output("EUC-JP"); 等も記述しておりますが、どうしても化けてしまいます。 回避方法等ご存知の方がおられましたら、ご教授お願いいたします。

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

    PHPでMySQLに接続して以下のように テーブルの作成・そのテーブルにInsertをすると文字化けします。 PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。 PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。 無料レンタルサーバーなので詳細な設定は変更できません。 <?php // データベースに接続し、選択する mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); $link = mysql_connect('localhost',"user","password") or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('user') or die('Could not select database'); mysql_query("SET NAMES UTF-8",$link); // SQL クエリを実行する $name = 'test'; $query = "CREATE TABLE IF NOT EXISTS `$name` ( `id` varchar(50) primary key, `name` varchar(50), `pw` varchar(50) );"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); $query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');"; $mojicode = mb_detect_encoding($query); $query = mb_convert_encoding($query, "UTF-8", "$mojicode"); $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // 結果セットを開放する mysql_free_result($result); // 接続を閉じる mysql_close($link); ?> まだまだPHP、MySQL共に技術が未熟なため 説明不足な部分が多々あるかと思いますがご教授お願いします。

    • ベストアンサー
    • PHP
  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • mySQL 4.0で文字化け

    はじめまして、PHP+mySQLでプログラムを勉強中の初心者です。 PHPからインサートした日本語データをphpmyadminで確認するとデータが化けています。SQL文自体をPHPで表示させると文字化けせずにちゃんと表示されます。  mySQL 4.1以降なら SET NAMESというコマンドをDB接続後に入れることで問題が回避できると言うことですが、mySQL 4.0ではコマンドエラーになってしまいます。 レンタルサーバーなので、PHPのアプリケーション側で対応できたらと考えています。 何かよい方法がないでしょうか? PHP 4.3.11は mySQL 4.0.27です。 PHPのキャラクターはutf-8, mySQLのCharactersetは latin1となっていました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLで文字化け

    DBからデータを持ってきてPHPで表示させると文字化けしてしまいます。 PHPはEUC-JPです。 mb_convert_encoding($message, "EUC-JP")としてみても文字化けしてしまいます。 どなたか対処方法教えていただけたら嬉しいです。

    • 締切済み
    • PHP