データベースに接続します
$mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME);
ここで、文字コードをutf8に設定します。
$mysqli->set_charset(‘utf8’);
これだけでは、まだダメな場合があります。
sqlに設定されている文字コードの確認は
show variables like ‘character%’;
ここで重要な変数が2つあります。
まず、
変数の名前 | 何についての変数? | 変数の意味 |
---|---|---|
character_set_client | client | クライアントからサーバに送るときの文字コード |
character_set_results | server | サーバがクライアントへ送るときの文字コード |
という関係があります。
つまり、MySQLからSELECTでサーバの中身をみに行く前に、
//サーバーがクライアントにクエリ結果を送る時にutf8にする
//(latin1だと全ての日本語が「?」に変換される)
$sql = “set character_set_results=utf8”;
$res = $mysqli->query($sql);
を設定する必要があります。
逆に、MySQLから
INSERTでサーバーに情報を追加したり、
UPDATEでサーバーの中身を変更したりする前に、
$mysqli->set_charset(‘utf8’);
$sql = “set character_set_clients=utf8”;
$res = $mysqli->query($sql);
を設定する必要があります。
これらの設定はデータベースが再起動されるたびに初期化されてしまいます。
ですので、クエリを投げる前に毎回この設定をする必要があります。
コメント