PHP で MySQL を操作するのに役立つリファレンス

PHP+MySQLリファレンス!

mysqli の文字コード(文字セット)を設定する。

スポンサードリンク

PHPクライアント側( mysqli )の文字コード(文字セット)を設定する方法を説明します。

文字コードを設定するには set_charset メソッドを使用します。

mysqliオブジェクト->set_charset(文字コード);

指定する文字コードは MySQL サーバー側に設定された character_set_client に合わせます。

もし character_set_client の値がわからない場合、 MySQL サーバーに mysql コマンドで接続後、SHOW VARIABLES LIKE 'character_set%'; と実行することで確認することができます。

Windows8 + PHP5.6.3 + MySQL5.6.21 の環境で実行した結果は次の通りでした。

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+------------------------------------+
| Variable_name            | Value                              |
+--------------------------+------------------------------------+
| character_set_client     | cp932                              |
| character_set_connection | cp932                              |
| character_set_database   | latin1                             |
| character_set_filesystem | binary                             |
| character_set_results    | cp932                              |
| character_set_server     | latin1                             |
| character_set_system     | utf8                               |
| character_sets_dir       | C:\app\mysql5.6.21\share\charsets\ |
+--------------------------+------------------------------------+
8 rows in set (0.00 sec)

上記の例では、 MySQL サーバーの character_set_client に cp932 が設定されていたので、 PHP 側もこれに合わせて CP932 を設定します。

ちなみに CP932 と SJIS-win は中身は同じなので、 SJIS-win を指定してもかまいません。

サンプルコードは次の通りです。

<?php
//接続設定
// ユーザー taro@localhost を パスワード abcd で接続し、
// test データベースに接続する場合の設定。
$host          = 'localhost';//ホスト名
$user_name     = 'taro';     //ユーザー名
$user_password = 'abcd';     //パスワード
$database_name = 'test';     //データベース名

print "------------- START -------------\n";

//接続設定に従って MySQL に接続
$mysqli = new mysqli($host, $user_name, $user_password, $database_name);

//mysqli に設定された文字コードを確認
print '変更前:' . $mysqli->character_set_name() . "\n";

//mysqli に文字コード CP932 を設定
$mysqli->set_charset('CP932');

//mysqli に設定された文字コードを確認
print '変更後:' . $mysqli->character_set_name() . "\n";

//MySQL から切断
$mysqli->close();

print "-------------  END  -------------\n";
?>

Windows8 + PHP5.6.3 + MySQL5.6.21 の環境で実行した結果は次の通りでした。

C:\temp>C:\app\php5.6.3\php.exe test.php
------------- START -------------
変更前:latin1
変更後:cp932
-------------  END  -------------

C:\temp>

尚、指定可能な文字コードの一覧は次のページを参照してください。

PHPで指定可能な文字コード一覧

スポンサードリンク

文字コード(文字セット)

その他のカテゴリー一覧