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の文字コードでデータが受け取れる。