mysqlの文字化け対策

フォームから入力した値を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)のほうでも設定できるようだがそんな知識は別の方が詳しいので参考サイト