アプリ版:「スタンプのみでお礼する」機能のリリースについて

利用サーバ:さくらインターネットのレンタルサーバ
利用データベースのバージョン:MySQL 5.1
PHPのバージョン:PHP 5.2.××
PHPMyAdminに記載のMySQL の文字セット: UTF-8 Unicode (utf8)
PHPMyAdminに記載のMySQL 接続の照合順序: utf8_general_ci

htmlやPHPファイルを、EUC-JPからUTF-8に、全て変えたためなのかは分かりませんが、
データベースに格納されている日本語(というか全角文字?)データを、
PHPで取り出せなくなってしまいました。半角英数字のデータは取得できます。
そのためDBから取得して表示させている文字データのうち、日本語のみが表示されません。

【php.iniファイルの中身】
register_globals = "On"
mbstring.language = "Japanese"
mbstring.internal_encoding = "UTF-8"
mbstring.encoding_translation = "On"
default_charset = "UTF-8"
output_buffering = "Off"
mbstring.http_input = "auto"
mbstring.http_output = "pass"
mbstring.detect_order = "auto"
mbstring.substitute_character = "none"

情報は足りますでしょうか?どなたか、よろしくお願いいたします。

A 回答 (3件)

php.ini の設定は PHP 単体での 入出力 設定なので、MySQL にはあまり関係ないですね。


mbstring.internal_encoding = "UTF-8" 場合によって絡んでくる位

MySQL のほうは my.ini ですが、レンタルサーバの場合は多分触れないですし、

表示がされないというのは、文字化けを起こしているのか、まったく何も表示されないのかどちらでしょうか。

MySQL 5.1 でしたら、PHP 側で何かするというより、MySQL のプリペアドステートメントの使用をお勧めします。(PHP 側でうまく設定してあげれば、PHP メインでということも可能ですが)

この回答への補足

全く表示されません。
PHP内のSQLでselectした直後にデータが取れてるかvar_dumpで見ても
日本語データだけ取れてませんでした。
その部分のデータを英数字に置き換えると取得できます。

「MySQL のプリペアドステートメントの使用」?ちょっと調べてみます。
引き続きよろしくお願いします。

補足日時:2010/11/18 21:25
    • good
    • 0

> さくらのレンタルサーバでMySQLの文字コードを UTF-8に変えるには、どうしたらいいのでしょうか?



さくらに限らず文字コードは手動でも変更可能ですので、クエリ実行前に

mysql_set_charset('utf8'); // (PHP 5.3.2+)
// この関数は、SET NAMES と等価ではないため、古いバージョンでは以下のようにする必要があります。

// PHP 5.3.2 以前の場合
mysql_unbufferd_query('SET NAMES utf8;');
mysql_unbufferd_query('SET character_set_connection = latin1;');

// 又は
mysql_unbufferd_query('SET NAMES utf8');

function mb_mysql_real_escape_string($str, $charset=null) {
is_null($charset) == false && mb_regex_encoding($charset);
return mb_ereg_replace('[\\x00\\n\\r\\\\\'"\\x1A]', '\\\\0', $str);
}

など。

プリペアドの件は、結局 PHP を介さないといけないので、忘れてください。
PDO を利用した場合でも事情は同じです。
    • good
    • 1
この回答へのお礼

色々とありがとうございます。
さくらに問い合わせたら「レンタルサーバではDBはEUC-JPから変更できない」
との回答でしたので諦めて、ちょっと面倒ですが地道に
mb_convert_encordingで文字コード変換(UTF-8⇔EUC-JP)することにしました。

お礼日時:2010/11/26 23:57

まったく表示されないとなると困りましたね。



システムが正常だとして、どこかで UTF-16 になっていないか調べてみてください。

それから、なるべく単純な処理 (データベースから取ってきて表示するだけ、固定値をテンプレートに渡して表示など)で部分ごとに調べてみてください。
    • good
    • 0
この回答へのお礼

どうも、MySQLの文字コードがEUC-JPになっているようです。
mb_convert_encodingで、

PHPフォームからDBへデータを登録する際は:UTF-8からEUC-JPに変換
DBからデータを取得する際:EUC-JPからUTF-8に変換

したら、日本語データも上手く表示されました。

さくらのレンタルサーバでMySQLの文字コードを
UTF-8に変えるには、どうしたらいいのでしょうか?
照合順序はUTF-8になってるんですけどね・・・

お礼日時:2010/11/22 07:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す