【即解決】heroku MySQL phpで日本語が使えない、文字化けする、はてな?になってしまう

スポンサーリンク
pythonやプログラミングへの挑戦
スポンサーリンク

データベースに接続します

$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);

を設定する必要があります。

 

これらの設定はデータベースが再起動されるたびに初期化されてしまいます。

ですので、クエリを投げる前に毎回この設定をする必要があります。

コメント