水曜以外もどうでしょう

北海道発。食べ歩きの記録グルメ情報や北海道の見どころなどをメモ替わりに書いています。

PREV | PAGE-SELECT | NEXT

≫ EDIT

phpからmysqlへの挿入で文字化け

webのformアプリケーション(php)からmysqlデータベースへ日本語をinsertして、文字化け発生。

よくある話ではあるのだが、別のレンタルサーバ(xserver)では正常に動いていた物。


今回は、お名前.comのVPS。


htmlコードもphpコードもmysqlの照合順序もutf-8にしているハズなのに、PhpMyAdminで見ると日本語部分が文字化け。

でも、該当データをphpで取り出してwebに表示しても化けないし、文字コード判定mb_detect_encoding()でもutf-8だと判断される。

「utf-8以外のコード」で格納されてしまったのだろうか?
それであれば、コード無変換でcharset="urf-8"のhtmlに表示して化けないのは逆におかしい?



取り出してweb表示が化けないからそのままでもイイかな?
とも思ったけど、PhpMyAdminからのエクスポートで化けているから、将来サーバ移管かなんかしたときに問題がおきそうな予感。


やっぱり解決しておくか。。


phpの設定はひと通りやっていたつもり。

mbstring.language = Japanese 
mbstring.encoding_translation = off 
mbstring.http_input = pass 
mbstring.http_output = pass 
mbstring.internal_encoding = UTF-8 
mbstring.substitute_character = none 
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 




いろいろと調べた結果、

db接続直後に以下のコマンドを実行すると良いようだ。


SET character_set_client = utf8
SET character_set_connection = utf8
SET character_set_server = utf8
SET character_set_results = utf8




DB.phpを使っているので、こんな感じで。(途中いろいろ省略)

require_once 'DB.php';

$this->db = DB::connect( $conectStr );

$this->db->query( 'SET character_set_client = utf8' );
$this->db->query( 'SET character_set_connection = utf8' );
$this->db->query( 'SET character_set_server = utf8' );
$this->db->query( 'SET character_set_results = utf8' );



希望通りに動いた。

スポンサーサイト
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| データベース | 03:11 | comments:0| trackbacks:0| TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://vmemo.blog36.fc2.com/tb.php/331-beeedc78

TRACKBACK

PREV | PAGE-SELECT | NEXT