mysql中の日本語データをphpで出力した際、文字コードがeuc-jpになってしまっていたので、その対処法のメモ。
文字コードはデータベースを作るときに、utf8_general_ciを指定していたのでまずは文字コードの確認。
文字コード確認
mysqlでテーブルに入ってから
mysql> show variables like 'char%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | ujis | | character_set_server | ujis | | character_set_system | utf8 | | character_sets_dir | /usr/local/share/mysql/charsets/ | +--------------------------+----------------------------------+
character_set_databaseはutf8だがclientやconnectionはujis(euc-jp)になってしまっている。
どうやらさくらインターネットスタンダードプランの仕様らしい。
http://wanizakki.seesaa.net/article/147630193.html
この情報によると、テーブルをエクスポートして設定を変えることにより対処できるようだが、かなりややこしい。
php側で対処することにした。
phpコード
$mysqli->set_charset(‘utf8’);
ではなく
mysqli_set_charset($mysqli, “utf8”);
を使用する。
$mysqli = new mysqli($db_sever, $user_name, $password, $db_name);
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
mysqli_set_charset($mysqli, "utf8");
if ($result = $mysqli->query("SELECT id FROM " .$table_name)) {
while ($row = $result->fetch_assoc()) {
echo $row["id"] . PHP_EOL ;
}
$result->close();
}
これでクライアント側でもutf8の文字コードでデータが受け取れる。