フォームから入力した値をmysqlのテーブルに登録するときに日本語が化けてしまった
php自体はutf8 でmysqlの文字コードもutf8なのでなぜ文字化けするのかなぞなんですけど・・・・テーブル作る時に照合順序を「utf-general-ci」にしなきゃいけないとかあるんですけね~
mysql_set_charsetで文字コード設定
よくある文字化けとしてデータベースに登録した値や取り出した値は「???」となることが多く。
原因としてはクライアント側の文字コードとサーバー側の文字コードがあってないことが原因っぽいです。
詳しくは「PHP PRO」のmysql_set_charset関数を使ってみるに書いてあります
//mysqlに接続
$conn=mysql_connect($server, $username, $password) or die("コネクトエラー");
//接続後に文字コードを設定する
mysql_set_charset('utf8');
SET NAMES utf8による注意点
PHP 5.2.3以前はset names によるクエリの発行で対処していたみたいなのですが、脆弱性があるようで、どうも使用しない方向みたですね~
しかもサーバー側のクライアント文字コードの変更はできるが、クライアント側の文字コードは設定されないようです。
以前は下記のような方法を使用していたみたいですね。
//mysqlに接続
$conn=mysql_connect($server, $username, $password) or die("コネクトエラー");
//set names による設定
mysql_query("set names utf8");
mysqlの文字コードの確認と設定の方法
どうやらMySQLの定義ファイル(my.ini, my.cnf)のほうでも設定できるようだがそんな知識は別の方が詳しいので参考サイト
- SREngine: Sein blog
- 渋谷生活 「MySQL 文字化けを防ぐ、文字コードの確認と設定」
- やんばるくいな 「MySQL5文字化け」
- Dosanko*SE:覚書 「MySQL5文字化け調査」
- KennyQi Blog 「MySQLとPHPの連携:: set names utf8以外の文字化け対策」
- ぱんぴーまっしぐら 「PHPとMySQLの個人的まとめ」